国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

811-子域名訪問計數

史占廣 / 3252人閱讀

摘要:作為頂級域名,常用的有,下一級則有,最低的一級為。當我們訪問域名時,也同時訪問了其父域名以及頂級域名。輸入中任意一個域名的訪問次數都小于。

前言

LeetCode上一道不算難的題目,但是一開始做的時候,執行時間很不理想,通過多次修改代碼,總算是改到比較滿意的地步。原題目如下:

一個網站域名,如"discuss.leetcode.com",包含了多個子域名。作為頂級域名,常用的有"com",下一級則有"leetcode.com",最低的一級為"discuss.leetcode.com"。當我們訪問域名"discuss.leetcode.com"時,也同時訪問了其父域名"leetcode.com"以及頂級域名 "com"。

給定一個帶訪問次數和域名的組合,要求分別計算每個域名被訪問的次數。其格式為訪問次數+空格+地址,例如:"9001 discuss.leetcode.com"。

接下來會給出一組訪問次數和域名組合的列表cpdomains 。要求解析出所有域名的訪問次數,輸出格式和輸入格式相同,不限定先后順序。

示例 1:
輸入: 
["9001 discuss.leetcode.com"]
輸出: 
["9001 discuss.leetcode.com", "9001 leetcode.com", "9001 com"]
說明: 
例子中僅包含一個網站域名:"discuss.leetcode.com"。按照前文假設,子域名"leetcode.com"和"com"都會被訪問,所以它們都被訪問了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"]
說明: 
按照假設,會訪問"google.mail.com" 900次,"yahoo.com" 50次,"intel.mail.com" 1次,"wiki.org" 5次。
而對于父域名,會訪問"mail.com" 900+1 = 901次,"com" 900 + 50 + 1 = 951次,和 "org" 5 次。

注意事項:

cpdomains 的長度小于 100。

每個域名的長度小于100。

每個域名地址包含一個或兩個"."符號。

輸入中任意一個域名的訪問次數都小于10000。

解題思路

只要利用HashMap的key不會重復的特性和對String進行分割就可以快速完成這道題

實現代碼 第一版

這個版本的代碼執行所用測試用例所用時間達到了94ms(由于leetcode服務器的負荷情況,不同時間段執行的所用時間可能會存在一定差異),簡直是慢到難以忍受的地步

    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]);//訪問次數
                String tmp=strs[1];//域名
                while(tmp.indexOf(".")!=-1){//域名中不存在點號.就結束
                    if(map.containsKey(tmp)){//判斷是否存在這個域名的記錄,有則累加,否則記錄下來
                        map.put(tmp,map.get(tmp)+times);
                    }else{
                        map.put(tmp,times);
                    }
                    //切割域名,轉換為更高一級的域名
                    tmp=tmp.substring(tmp.indexOf(".")+1);
                }
                //把最頂級域名的方法次數記錄下來
                if(map.containsKey(tmp)){
                    map.put(tmp,map.get(tmp)+times);
                }else{
                    map.put(tmp,times);
                }
            }
            map.forEach((k,v)->{//使用函數式編程接口BiConsumer把map轉為結果list
                list.add(v+" "+k);
            });
        }
        return list;
    }
第二版

通過優化后,執行時間變成了22ms,這么大的優化只是簡單的替換了使用的API,其中優化點如下:

使用Map的getOrDefault方法代替傳統的先使用containsKey方法判斷是否存在來決定是否執行累加邏輯。這樣可以減少Map的遍歷次數。

不使用函數式編程接口,改為使用迭代器遍歷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;
    }

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/76956.html

相關文章

  • Cabloy-CMS:動靜結合,解決Hexo痛點問題

    摘要:文章也不例外,只有提交進入正常狀態,才會進行渲染。提交并預覽首頁文章頁部署實例與子域名支持多實例,實例與網站子域名一一對應,不同實例的數據完全隔離。 介紹 Cabloy-CMS是什么 Cabloy-CMS是基于CabloyJS全棧業務開發框架開發的動靜結合的CMS,可以快速構建企業網站、博客、社區、商城等Web應用。 在線演示 https://zhennann.com 特性 Cablo...

    alin 評論0 收藏0
  • Leetcode PHP題解--D36 811. Subdomain Visit Count

    摘要:題目鏈接題目分析題目給定一個字符串數組,每個字符串分兩部分,以空格分割。第一部分為訪問次數,第二部分為域名。要求按同樣的格式,分別返回頂級域名二級域名三級域名的訪問次數。最終代碼若覺得本文章對你有用,歡迎用愛發電資助。 811. Subdomain Visit Count 題目鏈接 811. Subdomain Visit Count 題目分析 題目給定一個字符串數組,每個字符串分兩部...

    inapt 評論0 收藏0
  • 同源策略與跨域

    摘要:簡單地理解就是因為同源策略的限制,它是瀏覽器為了安全性考慮一種非常重要的策略,域名下的無法操作或是域名下的對象。同源策略會限制以下三種行為和無法讀取。例如中可以引用等資源,此類操作不受同源策略限制。 同源策略 同源策略same origin policy中的重要內容就是URL(uniform resource locator),統一資源定位符,俗稱網址。URL中的resource資源就...

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

    摘要:癥狀原來能正常顯示的情況下,將圖片文件改為子域名訪問,方便加速。切換之后一切正常,但是的圖片沒有正確顯示,全部顯示框框原因因為瀏覽器的安全規則,雖然是子域名,但是跨域載入字體文件的時候被瀏覽器攔截,導致了顯示不正常。解決以為例,修改或者 癥狀 原來能正常顯示的情況下,將js、css、圖片文件改為子域名訪問,方便cdn加速。切換之后一切正常,但是font-awesome的圖片沒有正確顯示...

    vboy1010 評論0 收藏0

發表評論

0條評論

史占廣

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<