当前位置: 首页 > news >正文

LeetCode 347 前 K 个高频元素

LeetCode 347 前 K 个高频元素

题目描述

题目链接
给定一个整数数组 nums 和一个整数 k,请返回其中出现频率前 k 高的元素。

解题思路

哈希表 + 堆排序法

  1. 频率统计阶段:使用哈希表统计元素出现频率
  2. 堆排序优化:通过维护最小堆来快速获取前k大元素
  3. 结果提取:从堆中提取排序后的结果

步骤说明

# leetcode 347
# 前k个高频元素
# https://leetcode.cn/problems/top-k-frequent-elements/description/
# 解法:
from typing import List
import heapq
from collections import Counterclass Solution:def topKFrequent(self, nums: List[int], k: int) -> List[int]:# 统计频率(哈希表O(n)freq = Counter(nums)  # 例如 nums=[1,1,2] {1:2, 2:1}# 构建堆元素(频率在前用于排序)heap = [(count, num) for num, count in freq.items()]  # [(2,1), (1,2)]# 获取前k大元素(堆排序O(nlogk)return [num for count, num in heapq.nlargest(k, heap)]if __name__ == "__main__":# 测试用例(题目示例)nums = [1, 1, 1, 2, 2, 3]k = 2print(Solution().topKFrequent(nums, k))  # 预期输出:[1, 2]

关键点解析

  1. 最小堆的选择 :

    • 维护容量为k的最小堆
    • 新元素频率 > 堆顶时进行替换
    • 最终堆中保留最大的k个元素
  2. 复杂度优化 :

    • 直接排序复杂度:O(nlogn)
    • 堆排序复杂度:O(nlogk)(k远小于n时优势明显)

时间复杂度:O(nlogk)
空间复杂度:O(n)

相关文章:

  • Word如何制作三线表格
  • HDMI布局布线
  • AI大模型基础设施:NVIDIA GPU和AMD MI300系列的区别
  • C++11新特性讲解
  • ACE-Step - 20秒生成4分钟完整歌曲,音乐界的Stable Diffusion,支持50系显卡 本地一键整合包下载
  • 基于RK3568多功能车载定位导航智能信息终端
  • hadoop中的序列化和反序列化(4)
  • Excel表格怎样导出为csv格式
  • 人脸识别技术应用管理办法的影响
  • 【基础篇】prometheus热更新解读
  • 第七章----输入输出模板
  • 2025安徽通信施工安全员C证精选练习题
  • 码蹄集——平方根X、整除幸运数
  • 全文索引数据库Elasticsearch底层Lucene
  • 云蝠智能大模型语音交互智能体赋能电视台民意调研回访:重构媒体数据采集新范式
  • 函数申明 Q_INVOKABLE
  • Sql刷题日志(day8)
  • 【AWS+Wordpress】将本地 WordPress 网站部署到AWS
  • Kafka是什么?典型应用场景有哪些? (消息队列、流处理平台;日志收集、实时分析、事件驱动架构等)
  • Linux系统Shell脚本之shell数组、正则表达式、及AWK
  • 重庆三峡学院回应“中标价85万设备网购300元”:已终止采购
  • 贵州省总工会党组成员、副主席梁伟接受审查调查
  • 外交部发言人就印巴局势升级答记者问
  • 罕见沙尘再度入川,官方:沙尘传输高度达到平流层,远超以往
  • 警惕“全网最低价”等宣传,市监总局和中消协发布直播消费提示
  • 以总理内塔尼亚胡称决心彻底击败哈马斯