本题要求返回前k个频率的数字
For example,
Given [1,1,1,2,2,3]
and k = 2, return [1,2]
.
我们的思路是构建一个map集合,将所有数字的出现次数统计并利用map的比较器进行排序,最后新建一个list1集合将结果返回;代码如下:
class Solution {
public List<Integer> topKFrequent(int[] nums, int k) {
Map<Integer, Integer> map = new HashMap<>();
for(int key : nums){
if(map.containsKey(key)){
map.put(key, (Integer)map.get(key) + 1 );
}else{
map.put(key, 1);
}
}
List<Map.Entry<Integer,Integer>> list = new ArrayList<Map.Entry<Integer,Integer>>(map.entrySet());
//然后通过比较器来实现排序
Collections.sort(list,new Comparator<Map.Entry<Integer,Integer>>() {
//降序排序
public int compare(Map.Entry<Integer,Integer > o1,
Map.Entry<Integer, Integer> o2) {
return o2.getValue().compareTo(o1.getValue());
}
});
List< Integer> list1 = new ArrayList<>();
Iterator<Map.Entry<Integer, Integer>> it = list.iterator();
while(it.hasNext()&&k>0){
Map.Entry<Integer,Integer> en = it.next();
list1.add(en.getKey());
k--;
}
return list1;
}
}