当前位置: 首页> 房产> 市场 > 重庆房地产新闻_海外人才招聘网_阿里域名购买网站_看片应该搜什么关键词哪些词

重庆房地产新闻_海外人才招聘网_阿里域名购买网站_看片应该搜什么关键词哪些词

时间:2025/7/9 12:12:30来源:https://blog.csdn.net/qq_14815605/article/details/143977270 浏览次数:1次
重庆房地产新闻_海外人才招聘网_阿里域名购买网站_看片应该搜什么关键词哪些词

LeetCode 347.前 K 个高频元素

题目描述

给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。

示例 1:

输入: nums = [1,1,1,2,2,3], k = 2
输出: [1,2]

示例 2:

输入: nums = [1], k = 1
输出: [1]

Java 实现代码

class Solution {public int[] topKFrequent(int[] nums, int k) {// 统计每个元素的频率Map<Integer, Integer> freqMap = new HashMap<>();for (int num : nums) {freqMap.put(num, freqMap.getOrDefault(num, 0) + 1);}// 使用一个最小堆(优先队列)来存储频率前 k 大的元素PriorityQueue<Map.Entry<Integer, Integer>> minHeap = new PriorityQueue<>((a, b) -> a.getValue() - b.getValue());// 保持堆的大小为 kfor (Map.Entry<Integer, Integer> entry : freqMap.entrySet()) {minHeap.offer(entry);if (minHeap.size() > k) {minHeap.poll(); // 移除堆顶元素}}// 提取堆中的元素,得到结果int[] result = new int[k];int index = 0;while (!minHeap.isEmpty()) {result[index++] = minHeap.poll().getKey();}return result;}
}

解题思路

  1. 统计元素频率 首先,我们需要统计数组中每个元素的出现频率。我们可以使用一个哈希表(Map<Integer, Integer>)来记录每个元素及其频率。

  2. 使用最小堆 为了高效地找到前 k 个高频元素,我们可以使用一个最小堆(PriorityQueue)。

    • 插入元素时,堆中的大小会保持为 k,若堆中的元素超过 k 个,则移除堆顶元素(即当前频率最小的元素)。
    • 通过最小堆的性质,最终堆顶元素就是频率最小的那一个。
  3. 返回结果 最后,将堆中的元素提取出来,得到前 k 个高频元素。

复杂度分析

  • 时间复杂度O(n log k)
  • 空间复杂度O(n + k)
关键字:重庆房地产新闻_海外人才招聘网_阿里域名购买网站_看片应该搜什么关键词哪些词

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: