给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。
示例 1:
输入: nums = [1,1,1,2,2,3], k = 2
输出: [1,2]
方法一:
利用hashMap计算频率,然后ArrayList排序
public int[] topKFrequent(int[] nums, int k) {
Map map = new HashMap<>(nums.length);
for (int num : nums) {
if (map.containsKey(num)) {
map.put(num, map.get(num) + 1);
} else {
map.put(num, 1);
}
}
List list = new ArrayList<>();
for (Map.Entry entry : map.entrySet()) {
list.add(new int[]{entry.getKey(), entry.getValue()});
}
list.sort(new Comparator() {
@Override
public int compare(int[] o1, int[] o2) {
if (o1[1] > o2[1]) {
return -1;
} else if (o1[1] < o2[1]) {
return 1;
}
return 0;
}
});
int[] res = new int[k];
for (int i = 0; i < k; i++) {
res[i] = list.get(i)[0];
}
return res;
}
方法二:堆排序



