news 2026/5/8 16:17:46

LeetCode 前 K 个高频元素题解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LeetCode 前 K 个高频元素题解

LeetCode 前 K 个高频元素题解

题目描述

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

示例

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

解题思路

方法:哈希表 + 堆

思路

  • 使用哈希表来统计每个元素出现的频率。
  • 使用一个小顶堆来维护前 k 个高频元素。
  • 遍历哈希表,将元素和其频率加入堆中,如果堆的大小超过 k,弹出堆顶元素。
  • 最后将堆中的元素转换为列表返回。

复杂度分析

  • 时间复杂度:O(n log k),其中 n 是数组的长度。遍历数组的时间复杂度是 O(n),堆操作的时间复杂度是 O(n log k)。
  • 空间复杂度:O(n),需要额外的空间来存储哈希表和堆。

代码实现

方法:哈希表 + 堆

import heapq from collections import defaultdict # 前 K 个高频元素(哈希表 + 堆) def top_k_frequent(nums, k): # 统计每个元素出现的频率 count = defaultdict(int) for num in nums: count[num] += 1 # 使用小顶堆来维护前 k 个高频元素 heap = [] for num, freq in count.items(): heapq.heappush(heap, (freq, num)) if len(heap) > k: heapq.heappop(heap) # 将堆中的元素转换为列表 result = [] while heap: result.append(heapq.heappop(heap)[1]) # 反转列表,使频率高的元素在前 return result[::-1] # 测试 def test_top_k_frequent(): nums = [1, 1, 1, 2, 2, 3] k = 2 print(top_k_frequent(nums, k)) # 输出:[1, 2] if __name__ == "__main__": test_top_k_frequent()

测试用例

测试用例 1:基本情况

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

总结

前 K 个高频元素是一个经典的哈希表问题,它可以通过哈希表和堆来高效地解决。

哈希表 + 堆法的核心思想是:使用哈希表统计每个元素出现的频率,然后使用小顶堆来维护前 k 个高频元素。

掌握哈希表和堆的使用方法,对于解决类似的问题非常重要。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/8 16:16:43

深入解析第三方Cookie读取与处理

在现代网络应用开发中,Cookie作为一种持久化客户端数据的方式,扮演着非常重要的角色。然而,处理第三方Cookie时,常常会遇到一些技术挑战。本文将详细探讨如何在C#中读取并处理第三方Cookie的具体问题,并提供一个实际的代码示例。 问题背景 假设我们有一个第三方Cookie,…

作者头像 李华