当前位置: 首页 > 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.xdnf.cn/news/320491.html

相关文章:

  • 【LUT技术专题】基于扩展卷积的极快速LUT算法
  • 【论文阅读】Harnessing the Power of LLM to Support Binary Taint Analysis
  • 浅聊find_package命令的搜索模式(Search Modes)
  • 一种扫描雷达超分辨成像检测一体化方法——论文阅读
  • [20250507] AI边缘计算开发板行业调研报告 ​​(2024年最新版)​
  • JNDI 注入原理解析
  • 力扣HOT100之链表:146. LRU 缓存
  • 信息论12:从信息增益到信息增益比——决策树中的惩罚机制与应用
  • 三角网格减面算法及其代表的算法库都有哪些?
  • “430”“531”光伏政策变革下,安科瑞如何 “保驾护航”?
  • Oracle OCP认证考试考点详解083系列11
  • windows10系统:如何使用电脑控制手机上多个应用程序(app)?
  • Oracle Goldengate并行复制
  • JS进阶DAY2 构造函数数据常用函数
  • 基于深度学习的交通标志识别系统
  • 如何根据HardFault中断抛出的寄存器值排查数组越界
  • 【EasyPan】loadDataList方法及checkRootFilePid方法解析
  • 阿里云服务器-宝塔面板安装【保姆级教程】
  • 如何将B站(哔哩哔哩)的视频下载到电脑
  • 二叉查找树,平衡二叉树(AVL),b树,b+树,红黑树
  • 实验一:Linux静态路由
  • 如何利用 Elastic Load Balancing 提升应用性能与可用性?
  • VScode一直处于循环“正在重新激活终端“问题的解决方法
  • 软件设计师2025
  • 隐私计算技术及其在数据安全中的应用:守护数据隐私的新范式
  • Word如何制作三线表格
  • ABB机器人基础课件及培训视频教程
  • RabbitMQ中Exchange交换器的类型
  • 国产Word处理控件Spire.Doc教程:在Java中为Word文本和段落设置边框
  • 【Pandas】pandas DataFrame rolling