【Leetcode】python - [347] Top K Frequent Elements 個人解法筆記

題目出處

347. Top K Frequent Elements

難度

medium

個人範例程式碼

class Solution:
    def topKFrequent(self, nums: List[int], k: int) -> List[int]:
        if not nums:
            return nums

        # O(N)
        counter = Counter(nums)
        freq_counter = defaultdict(list)

        # O(N)
        for key, value in counter.items():
            freq_counter[value].append(key)

        ans = []
        # O(NlogN)
        for key in sorted(freq_counter.keys(), reverse=True):
            ans += freq_counter[key]
            k -= len(freq_counter[key])
            if k <= 0:
                break

        return ans

直接使用 dict.items() + sorted tuple 排序

更俐落一點的寫法,直接把 dict.items() 轉作 tuple 來看後,直接排序
如果用法不熟,用上面方法即可。

class Solution:
    def topKFrequent(self, nums: List[int], k: int) -> List[int]:
        if not nums:
            return nums

        # O(N)
        counter = Counter(nums) # key: freq

        # O(NlogN)
        sorted_tuple_by_freq = sorted(counter.items(), key=lambda x: x[1], reverse=True)

        # print(sorted_tuple_by_freq)

        ans = []
        for i in range(k):
            ans.append(sorted_tuple_by_freq[i][0])

        return ans

算法說明

我們先計算數字頻率,可以搭配內建函數 counter 快速實現,
再來針對出現次數進行排序,
然後選出前 K 個答案即可。

input handling

如果沒有 nums,return nums

Boundary conditions

用 for 來控制範圍

Reference

Licensed under CC BY-NC-SA 4.0