1. 程式人生 > >LintCode:471. 最高頻的K個單詞

LintCode:471. 最高頻的K個單詞

題目:給一個單詞列表,求出這個列表中出現頻次最高的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;
    }
}