# 資訊 :::info - Question: 3005. Count Element With Maximum Frequency - From: Leetcode Daily Challenge 2024.03.08 - Difficulty: Easy ::: --- # 目錄 :::info [TOC] ::: --- # 題目 You are given an array `nums` consisting of positive integers. Return the total frequencies of elements in `nums` such that those elements all have the maximum frequency. The **frequency** of an element is the number of occurrences of that element in the array. > Example 1: :::success - Input: `nums = [1,2,2,3,1,4]` - Output: 4 - Explanation: The elements 1 and 2 have a frequency of 2 which is the maximum frequency in the array. So the number of elements in the array with maximum frequency is 4. ::: > Example 2: :::success - Input: `nums = [1,2,3,4,5]` - Output: 5 - Explanation: All elements of the array have a frequency of 1 which is the maximum. So the number of elements in the array with maximum frequency is 5. ::: > Constraints: :::success - 1 <= `nums.length` <= 100 - 1 <= `nums[i]` <= 100 ::: --- # 解法 ## 概念 以後看到 hash table 跟 counting 就要想到 Python 黑科技,記得以後真的使用前要寫上 `import collections` 這一行! 這題需要的大概就是紀錄頻率跟比大小,所以如果有能快速幫我找出 maximum 的對應的會比較好實作,這時候就想到了 python 的 collections,因為裡面有個功能是 counter,counter 基本上就是所有計數器該有的功能都先幫你包得好好的,然後用字典讓你做查詢、運算,這次就拿它來使用 * 第 3 行:創一個 counter * 第 4 - 5 行:用 counter 紀錄元素出現頻率 * 第 6 行:利用 `counter.most_common()` 功能把出現頻率依照大小排序,回傳一個 list * 第 7 - 12 行:尋找最大頻率的所有解,把他們加起來 * 第 13 行:回傳答案 ## 程式碼 ```python= class Solution: def maxFrequencyElements(self, nums: List[int]) -> int: c = Counter() for e in nums: c[str(e)] += 1 c = c.most_common() ans = c[0][1] for i in range( 1, len(c), 1 ): if c[i][1] != c[0][1]: break else: ans += c[i][1] return ans ``` --- # 複雜度 ## 時間複雜度 走訪過整條 list 紀錄頻率,所以是 $O(n)$ ![TimeComplexity20240308](https://hackmd.io/_uploads/r1i4uk_pa.png =80%x) ## 空間複雜度 創了 counter,後面又為了紀載 cost_common 而多了一個 list,算是 $O(2n) = O(n)$ ![SpaceComplexity20240308](https://hackmd.io/_uploads/HyxUdJOa6.png =80%x)