LeetCode 347. Top K Frequent Elements

本文介绍了如何利用最小堆和快速选择算法来解决LeetCode上的347题。通过堆实现可以在O(nlogk)的时间复杂度内找出k个最频繁出现的元素,而快速选择算法则能在平均O(n)的时间复杂度下完成任务,避免了堆的额外空间开销。文章提供了两种算法的实现细节和运行时间、内存消耗对比。
摘要由CSDN通过智能技术生成

题目

Given a non-empty array of integers, return the k most frequent elements.

Example 1:

Input: nums = [1,1,1,2,2,3], k = 2
Output: [1,2]

Example 2:

Input: nums = [1], k = 1
Output: [1]

Note:

  • You may assume k is always valid, 1 ≤ k ≤ number of unique elements.
  • Your algorithm's time complexity must be better than O(n log n), where n is the array's size.
  • It's guaranteed that the answer is unique, in other words the set of the top k frequent elements is unique.
  • You can return the answer in any order.

首先还是老生常谈的heap。求最大的k个就用min heap,保证min heap的size不超过k,如果超过了就把top poll了,相当于是把最小的poll了,也就是最后poll掉了n - k个最小的,剩下的就是k个最大的了。时间复杂都O(nlogk)。

Runtime: 10 ms, faster than 71.53% of Java online submissions for Top K Frequent Elements.

Memory Usage: 41.8 MB, less than 87.15% of Java online submissions for Top K Frequent Elements.

class Solution {    
    public int[] topKFrequent(int[] nums,
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值