LintCode:471. 最高頻的K個單詞
阿新 • • 發佈:2019-01-29
題目:給一個單詞列表,求出這個列表中出現頻次最高的K個單詞。
思路:本題並不難,主要需要重新實現一個hashmap根據key值和value值排序的comparator介面即可。但hashmap並沒有比較器介面,所以需要把hashmap的entryset匯入一個list中,呼叫Collections.sort方法重新實現comparator介面即可,具體實現程式碼如下:
public class Solution { /** * @param words: an array of string * @param k: An integer * @return: an array of string */ public String[] topKFrequentWords(String[] words, int k) { // write your code here String[] string=new String[k]; HashMap<String,Integer> hashMap=new HashMap<>(); for(int i=0;i<words.length;i++){ if(hashMap.containsKey(words[i])){ int val=hashMap.get(words[i]); hashMap.put(words[i],++val); }else{ hashMap.put(words[i],1); } } List<Map.Entry<String,Integer>> list=new ArrayList<>(hashMap.entrySet()); Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() { @Override public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) { if(o1.getValue()>o2.getValue()){ return -1; }else if(o1.getValue()<o2.getValue()){ return 1; }else{ return o1.getKey().compareTo(o2.getKey()); } } }); for(int i=0;i<k;i++){ string[i]=list.get(i).getKey(); } return string; } }