题意:给出一个数组,返回前K个最频繁出现的数
思路: 其实这个题特别水,用hash记录了出现次数然后排序了一下次数,贴出来主要是因为java自定义排序不熟悉=_=
import java.util.*;
public class Solution {
public List<Integer> topKFrequent(int[] a, int k) {
Arrays.sort(a);
HashMap<Integer,Integer> map = new HashMap<Integer, Integer>();
for (int i = 0; i < a.length; i++) {
if(map.get(a[i])==null){
map.put(a[i],1);
}else{
int cnt = map.get(a[i]);
map.put(a[i],cnt+1);
}
}
List<Map.Entry<Integer, Integer>> infoIds = new ArrayList<Map.Entry<Integer, Integer>>(map.entrySet());
Collections.sort(infoIds, new Comparator<Map.Entry<Integer, Integer>>() {
public int compare(Map.Entry<Integer, Integer> o1, Map.Entry<Integer, Integer> o2) {
return (o2.getValue() - o1.getValue());
}
});
List<Integer> ans = new ArrayList<Integer>();
for (int i = 0; i < k; i++) {
ans.add(infoIds.get(i).getKey());
}
return ans;
}
}