给定一个非空的整数数组,返回其中出现频率前 k 高的元素。
示例 1:
输入: nums = [1,1,1,2,2,3], k = 2
输出: [1,2]
示例 2:
输入: nums = [1], k = 1
输出: [1]
class Solution {
public int[] topKFrequent(int[] nums, int k) {
List<Integer> res=new ArrayList<>();
Map<Integer,Integer> map=new HashMap<>();
for(int num:nums){
map.put(num,map.getOrDefault(num,0)+1);
}
List<Integer>[] list=new List[nums.length+1];
for(int key:map.keySet()){
int i=map.get(key);
if(list[i]==null){
list[i]=new ArrayList();
}
list[i].add(key);
}
for(int i=list.length-1;i>=0 && res.size()<k;i--){
if(list[i]==null) continue;
res.addAll(list[i]);
}
int[] ans=new int[k];
for(int i=0;i<k;i++){
ans[i]=res.get(i);
}
return ans;
}
}
网友评论