HashMap暴力枚举(洛谷P1765题题解,Java语言描述)
前言
本題水題一個(gè),但是這里會(huì)結(jié)合著提一些HashMap的內(nèi)容~~但不是什么深度分析,沒營養(yǎng)的。。。
題目要求
P1765題目鏈接
分析
這題懶得去排著弄,突然就覺得不如打個(gè)表,這樣還是很簡潔滴~~
既然是Java,那就HashMap啊,泛型選<Character, Integer>,用char當(dāng)key,int當(dāng)value,通過char數(shù)組中的元素找出對(duì)應(yīng)的value,很簡單~~
AC代碼(Java語言描述)
import java.util.HashMap; import java.util.Map; import java.util.Scanner;public class Main {public static void main(String[] args) {Map<Character, Integer> map = new HashMap<>(32);map.put('a', 1);map.put('b', 2);map.put('c', 3);map.put('d', 1);map.put('e', 2);map.put('f', 3);map.put('g', 1);map.put('h', 2);map.put('i', 3);map.put('j', 1);map.put('k', 2);map.put('l', 3);map.put('m', 1);map.put('n', 2);map.put('o', 3);map.put('p', 1);map.put('q', 2);map.put('r', 3);map.put('s', 4);map.put('t', 1);map.put('u', 2);map.put('v', 3);map.put('w', 1);map.put('x', 2);map.put('y', 3);map.put('z', 4);map.put(' ', 1);Scanner scanner = new Scanner(System.in);String line = scanner.nextLine();scanner.close();char[] chars = line.toCharArray();int counter = 0;for (char c : chars) {counter += map.get(c);}System.out.println(counter);} }About~HashMap
簡單扯兩句吧~~
1.建立HashMap最好指定長度,這是被強(qiáng)調(diào)的!!下圖為Alibaba的Java開發(fā)手冊(cè)內(nèi)容:
如果我們不這么做,假設(shè)集合容量較大,則頻繁的resize會(huì)損耗性能。
特別是HashMap,當(dāng)其resize時(shí)相當(dāng)于還要rehash,性能損耗不小啊。。。
除此之外,這么處理就是很慢,簡單測試可知。
由于本題我們已知容量是26+1=27,那么根據(jù)HashMap的機(jī)理,內(nèi)部長度被初始化為32(臨近的2的冪次),而避免了默認(rèn)的16→32的resize。
2.HashMap是真的快。
我們打上時(shí)間戳,用System.currentTimeMillis()這個(gè)方法,調(diào)整initialCapacity參數(shù),給一段比較長的文字,粗劣的測試一下運(yùn)行時(shí)間,結(jié)果是0……。
真快啊~~Orz
(原來整個(gè)程序又是被Scanner拖慢了,我醉了……)
3.HashMap相關(guān)的紅黑樹啊,鏈表啊,那些自己看看文檔和源碼吧,這只是一個(gè)巨水的OJ,懶得說咯~~
總之,本題用HashMap還是很爽的~~
總結(jié)
以上是生活随笔為你收集整理的HashMap暴力枚举(洛谷P1765题题解,Java语言描述)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 区间数值计数(洛谷P1980题题解,Ja
- 下一篇: 过河卒(洛谷P1002题解,Java语言