成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

811-子域名訪(fǎng)問(wèn)計(jì)數(shù)

史占廣 / 3309人閱讀

摘要:作為頂級(jí)域名,常用的有,下一級(jí)則有,最低的一級(jí)為。當(dāng)我們?cè)L問(wèn)域名時(shí),也同時(shí)訪(fǎng)問(wèn)了其父域名以及頂級(jí)域名。輸入中任意一個(gè)域名的訪(fǎng)問(wèn)次數(shù)都小于。

前言

LeetCode上一道不算難的題目,但是一開(kāi)始做的時(shí)候,執(zhí)行時(shí)間很不理想,通過(guò)多次修改代碼,總算是改到比較滿(mǎn)意的地步。原題目如下:

一個(gè)網(wǎng)站域名,如"discuss.leetcode.com",包含了多個(gè)子域名。作為頂級(jí)域名,常用的有"com",下一級(jí)則有"leetcode.com",最低的一級(jí)為"discuss.leetcode.com"。當(dāng)我們?cè)L問(wèn)域名"discuss.leetcode.com"時(shí),也同時(shí)訪(fǎng)問(wèn)了其父域名"leetcode.com"以及頂級(jí)域名 "com"。

給定一個(gè)帶訪(fǎng)問(wèn)次數(shù)和域名的組合,要求分別計(jì)算每個(gè)域名被訪(fǎng)問(wèn)的次數(shù)。其格式為訪(fǎng)問(wèn)次數(shù)+空格+地址,例如:"9001 discuss.leetcode.com"。

接下來(lái)會(huì)給出一組訪(fǎng)問(wèn)次數(shù)和域名組合的列表cpdomains 。要求解析出所有域名的訪(fǎng)問(wèn)次數(shù),輸出格式和輸入格式相同,不限定先后順序。

示例 1:
輸入: 
["9001 discuss.leetcode.com"]
輸出: 
["9001 discuss.leetcode.com", "9001 leetcode.com", "9001 com"]
說(shuō)明: 
例子中僅包含一個(gè)網(wǎng)站域名:"discuss.leetcode.com"。按照前文假設(shè),子域名"leetcode.com"和"com"都會(huì)被訪(fǎng)問(wèn),所以它們都被訪(fǎng)問(wèn)了9001次。

示例 2:
輸入: 
["900 google.mail.com", "50 yahoo.com", "1 intel.mail.com", "5 wiki.org"]
輸出: 
["901 mail.com","50 yahoo.com","900 google.mail.com","5 wiki.org","5 org","1 intel.mail.com","951 com"]
說(shuō)明: 
按照假設(shè),會(huì)訪(fǎng)問(wèn)"google.mail.com" 900次,"yahoo.com" 50次,"intel.mail.com" 1次,"wiki.org" 5次。
而對(duì)于父域名,會(huì)訪(fǎng)問(wèn)"mail.com" 900+1 = 901次,"com" 900 + 50 + 1 = 951次,和 "org" 5 次。

注意事項(xiàng):

cpdomains 的長(zhǎng)度小于 100。

每個(gè)域名的長(zhǎng)度小于100。

每個(gè)域名地址包含一個(gè)或兩個(gè)"."符號(hào)。

輸入中任意一個(gè)域名的訪(fǎng)問(wèn)次數(shù)都小于10000。

解題思路

只要利用HashMap的key不會(huì)重復(fù)的特性和對(duì)String進(jìn)行分割就可以快速完成這道題

實(shí)現(xiàn)代碼 第一版

這個(gè)版本的代碼執(zhí)行所用測(cè)試用例所用時(shí)間達(dá)到了94ms(由于leetcode服務(wù)器的負(fù)荷情況,不同時(shí)間段執(zhí)行的所用時(shí)間可能會(huì)存在一定差異),簡(jiǎn)直是慢到難以忍受的地步

    public List subdomainVisits(String[] cpdomains) {
        List list=new ArrayList<>();
        if(cpdomains!=null){
            Map map=new HashMap<>();
            for(String cpdomain:cpdomains){
                String[] strs=cpdomain.split(" ");
                int times=Integer.valueOf(strs[0]);//訪(fǎng)問(wèn)次數(shù)
                String tmp=strs[1];//域名
                while(tmp.indexOf(".")!=-1){//域名中不存在點(diǎn)號(hào).就結(jié)束
                    if(map.containsKey(tmp)){//判斷是否存在這個(gè)域名的記錄,有則累加,否則記錄下來(lái)
                        map.put(tmp,map.get(tmp)+times);
                    }else{
                        map.put(tmp,times);
                    }
                    //切割域名,轉(zhuǎn)換為更高一級(jí)的域名
                    tmp=tmp.substring(tmp.indexOf(".")+1);
                }
                //把最頂級(jí)域名的方法次數(shù)記錄下來(lái)
                if(map.containsKey(tmp)){
                    map.put(tmp,map.get(tmp)+times);
                }else{
                    map.put(tmp,times);
                }
            }
            map.forEach((k,v)->{//使用函數(shù)式編程接口BiConsumer把map轉(zhuǎn)為結(jié)果list
                list.add(v+" "+k);
            });
        }
        return list;
    }
第二版

通過(guò)優(yōu)化后,執(zhí)行時(shí)間變成了22ms,這么大的優(yōu)化只是簡(jiǎn)單的替換了使用的API,其中優(yōu)化點(diǎn)如下:

使用Map的getOrDefault方法代替?zhèn)鹘y(tǒng)的先使用containsKey方法判斷是否存在來(lái)決定是否執(zhí)行累加邏輯。這樣可以減少M(fèi)ap的遍歷次數(shù)。

不使用函數(shù)式編程接口,改為使用迭代器遍歷Map中的元素

    public List subdomainVisits(String[] cpdomains) {
        List list=new ArrayList<>();
        if(cpdomains!=null){
            Map map=new HashMap<>();
            for(String cpdomain:cpdomains){
                int times=Integer.valueOf(cpdomain.substring(0,cpdomain.indexOf(" ")));
                String domain=cpdomain.substring(cpdomain.indexOf(" ")+1);
                while(domain.indexOf(".")!=-1){
                    //減少判斷是否存在的那次遍歷
                    map.put(domain,map.getOrDefault(domain,0)+times);
                    domain=domain.substring(domain.indexOf(".")+1);
                }
                map.put(domain,map.getOrDefault(domain,0)+times);
            }
            //使用迭代器遍歷Map的元素
            Iterator> it=map.entrySet().iterator();
            while(it.hasNext()){
                Map.Entry entry=it.next();
                list.add(entry.getValue() + " " + entry.getKey());
            }
        }
        return list;
    }

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/76956.html

相關(guān)文章

  • Cabloy-CMS:動(dòng)靜結(jié)合,解決Hexo痛點(diǎn)問(wèn)題

    摘要:文章也不例外,只有提交進(jìn)入正常狀態(tài),才會(huì)進(jìn)行渲染。提交并預(yù)覽首頁(yè)文章頁(yè)部署實(shí)例與子域名支持多實(shí)例,實(shí)例與網(wǎng)站子域名一一對(duì)應(yīng),不同實(shí)例的數(shù)據(jù)完全隔離。 介紹 Cabloy-CMS是什么 Cabloy-CMS是基于CabloyJS全棧業(yè)務(wù)開(kāi)發(fā)框架開(kāi)發(fā)的動(dòng)靜結(jié)合的CMS,可以快速構(gòu)建企業(yè)網(wǎng)站、博客、社區(qū)、商城等Web應(yīng)用。 在線(xiàn)演示 https://zhennann.com 特性 Cablo...

    alin 評(píng)論0 收藏0
  • Leetcode PHP題解--D36 811. Subdomain Visit Count

    摘要:題目鏈接題目分析題目給定一個(gè)字符串?dāng)?shù)組,每個(gè)字符串分兩部分,以空格分割。第一部分為訪(fǎng)問(wèn)次數(shù),第二部分為域名。要求按同樣的格式,分別返回頂級(jí)域名二級(jí)域名三級(jí)域名的訪(fǎng)問(wèn)次數(shù)。最終代碼若覺(jué)得本文章對(duì)你有用,歡迎用愛(ài)發(fā)電資助。 811. Subdomain Visit Count 題目鏈接 811. Subdomain Visit Count 題目分析 題目給定一個(gè)字符串?dāng)?shù)組,每個(gè)字符串分兩部...

    inapt 評(píng)論0 收藏0
  • 同源策略與跨域

    摘要:簡(jiǎn)單地理解就是因?yàn)橥床呗缘南拗?,它是瀏覽器為了安全性考慮一種非常重要的策略,域名下的無(wú)法操作或是域名下的對(duì)象。同源策略會(huì)限制以下三種行為和無(wú)法讀取。例如中可以引用等資源,此類(lèi)操作不受同源策略限制。 同源策略 同源策略same origin policy中的重要內(nèi)容就是URL(uniform resource locator),統(tǒng)一資源定位符,俗稱(chēng)網(wǎng)址。URL中的resource資源就...

    xavier 評(píng)論0 收藏0
  • CSS 字體(例如font-awesome),使用子域之后不能正確顯示

    摘要:癥狀原來(lái)能正常顯示的情況下,將圖片文件改為子域名訪(fǎng)問(wèn),方便加速。切換之后一切正常,但是的圖片沒(méi)有正確顯示,全部顯示框框原因因?yàn)闉g覽器的安全規(guī)則,雖然是子域名,但是跨域載入字體文件的時(shí)候被瀏覽器攔截,導(dǎo)致了顯示不正常。解決以為例,修改或者 癥狀 原來(lái)能正常顯示的情況下,將js、css、圖片文件改為子域名訪(fǎng)問(wèn),方便cdn加速。切換之后一切正常,但是font-awesome的圖片沒(méi)有正確顯示...

    vboy1010 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

史占廣

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<