1. 问题描述:
给定一个大小为 n 的数组,找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素。说明: 要求算法的时间复杂度为 O(n),空间复杂度为 O(1)。
示例 1:
输入: [3,2,3]
输出: [3]
示例 2:
输入: [1,1,1,3,3,2,2,2]
输出: [1,2]
2. 思路分析:
分析题目可以知道我们需要统计出数组中各个数字出现的次数然后找出超出n / 3的元素即可,统计数字出现的次数对于c++或者是Java语言来说可以使用map来计数,对于python来说可以直接使用调用python中的collections.Counter方法进行计数,调用这个方法得到的是一个类似于字典的结果,我们只需要对这个结果进行判断找到符合条件的结果进行返回即可
3. 代码如下:
import collections
from typing import List
class Solution:
# 使用字典统计出每一个数字出现的次数即可: 使用collections.Counter方法即可统计
def majorityElement(self, nums: List[int]) -> List[int]:
dic, length = collections.Counter(nums), len(nums)
res = list()
for key, value in dic.items():
if value > length // 3: res.append(key)
return res