其他分享
首页 > 其他分享> > [LeetCode] 347. Top K Frequent Elements_Medium tag: Array, Heap

[LeetCode] 347. Top K Frequent Elements_Medium tag: Array, Heap

作者:互联网

Given an integer array nums and an integer k, return the k most frequent elements. You may return the answer in any order.

 

Example 1:

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

Example 2:

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

 

Constraints:

 

Follow up: Your algorithm's time complexity must be better than O(n log n), where n is the array's size.

Ideas:

1. 利用collections.Counter(), 得到num: countNum 的dictionary, 再将它根据countNum来排序,取前面k个即可。

n = len(nums),   m = len(distinct number )

T: O(m * lgm)      S: O(m)

class Solution:
    def topKFrequent(self, nums: List[int], k: int) -> List[int]:
        d = collections.Counter(nums)
        ans, freqs = [], sorted([(d[num], num) for num in d], reverse = True)
        for i in range(k):
            ans.append(freqs[i][1])
        return ans

 

2. 利用heap和python的heapq.nlargest()method

T: O(n * lgk)   S: O(k)

class Solution(object):
    def topKFrequent(self, nums, k):
        """ Given a non-empty array of integers, return the k most frequent elements.

        heapq.nlargest(n, iterable[, key])
        Return a list with the n largest elements from the dataset defined by iterable.
        """
        count = collections.Counter(nums)
        return heapq.nlargest(k, count, key=lambda x: count[x])

 

3. TODO: quicksort or quick select. 

 

标签:heapq,Elements,return,nums,Top,num,tag,array,elements
来源: https://www.cnblogs.com/Johnsonxiong/p/14943178.html