当前位置: 首页 > 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)

http://www.dtcms.com/a/177008.html

相关文章:

  • 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
  • 自编码器(Autoencoder)
  • 写程序,统计两会政府工作报告热词频率,并生成词云
  • Python 运维脚本
  • seata 1.5.2 升级到2.1.0版本
  • 力扣HOT100之链表:146. LRU 缓存
  • Inference-Time Scaling for Generalist Reward Modeling
  • (四)Java逻辑运算符和位运算符全面解析
  • 通配符 DNS 记录:应用场景与相关风险
  • SEO关键词与长尾词精准布局策略
  • 【Bootstrap V4系列】学习入门教程之 组件-折叠(Collapse)