题目:
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,