347. 前 K 个高频元素
给你一个整数数组 nums
和一个整数 k
,请你返回其中出现频率前 k
高的元素。你可以按 任意顺序 返回答案。
示例 1:
输入: nums = [1,1,1,2,2,3], k = 2 输出: [1,2]
示例 2:
输入: nums = [1], k = 1 输出: [1]
其实我这个写法并没有完全的符合题意,他实际的时间复杂度达到了nlogn。但是比较简单好理解,就是利用java提供的排序方法,先用map记录每个数出现的次数,利用list列表进行排序,再把排好序的数插入到数组中。
public int[] topKFrequent(int[] nums, int k) {// 创建一个 HashMap 来存储每个元素及其出现的频率Map<Integer, Integer> map = new HashMap<>();// 遍历 nums 数组中的每个元素for (int num : nums) {// 更新元素 num 的出现频率,如果 num 不在 map 中则使用默认值 0,然后加 1map.put(num, map.getOrDefault(num, 0) + 1);}// 将 HashMap 中的键值对转换成一个 List 以便于排序List<Map.Entry<Integer, Integer>> list = new ArrayList<>(map.entrySet());// 对 List 进行排序,按照频率的降序排序Collections.sort(list, (a, b) -> b.getValue().compareTo(a.getValue()));// 创建一个数组,用于存储出现频率前 k 高的元素int[] arr = new int[k];// 从排序后的 List 中提取前 k 个频率最高的元素,并存储到数组 arr 中for (int i = 0; i < k; i++) {arr[i] = list.get(i).getKey();}// 返回结果数组return arr;
}