https://leetcode.cn/problems/top-k-frequent-elements/description/?envType=study-plan-v2&envId=top-100-liked
347. 前 K 个高频元素
已解答
中等
相关标签
相关企业
给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。
这题有进阶要求的时间复杂度,看了下进阶的有点复杂。不过我写的用map也能过,先低要求自己,过了就行。
class Solution {
public int[] topKFrequent(int[] nums, int k) {
Map<Integer,Integer> map = new HashMap<Integer,Integer>();
for(int i=0;i<nums.length;i++){
map.put(nums[i], map.getOrDefault(nums[i], 0) + 1);
}
// 将 Map 的条目转换为 List,并按值排序
List<Map.Entry<Integer, Integer>> entryList = new ArrayList<>(map.entrySet());
// 按照 value 从大到小排序
entryList.sort((entry1, entry2) -> entry2.getValue() - entry1.getValue());
// 创建一个 int 数组来存储前 k 个值
int[] topKValues = new int[k];
// 填充 int 数组
for (int i = 0; i < topKValues.length; i++) {
topKValues[i] = entryList.get(i).getKey();
}
return topKValues;
}
}