摘要:作為頂級(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 ListsubdomainVisits(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
摘要:文章也不例外,只有提交進(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...
摘要:題目鏈接題目分析題目給定一個(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è)字符串分兩部...
摘要:癥狀原來(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)有正確顯示...
閱讀 1413·2021-09-22 10:02
閱讀 1992·2021-09-08 09:35
閱讀 4097·2021-08-12 13:29
閱讀 2639·2019-08-30 15:55
閱讀 2289·2019-08-30 15:53
閱讀 2330·2019-08-29 17:13
閱讀 2786·2019-08-29 16:31
閱讀 2978·2019-08-29 12:24