classSolution:defmajorityElement(self, nums: List[int])->int:# 时间复杂度o(n)# 空间复杂度O(n)
dict_num ={}for item in nums:if item in dict_num:
dict_num[item]+=1else:
dict_num[item]=1if dict_num[item]>len(nums)//2:return item
return-1
摩尔投票法,两个不同的数相互抵消,剩下的区间中众数仍然是众数
classSolution:defmajorityElement(self, nums: List[int])->int:# 时间复杂度o(n)# 空间复杂度O(1)
n =len(nums)if n <=0:return
res =0
count =0for i inrange(n):if count ==0:
res = nums[i]
count =1elif nums[i]== res:
count +=1else:
count -=1return res
哈希表,直接统计频次,返回个数大于1/3的,时间复杂度O(n),空间复杂度O(n)
classSolution:defmajorityElement(self, nums: List[int])-> List[int]:# 和递归回溯有啥关系呢
n =len(nums)if n <=0:return
dict_num ={}
res =set()for item in nums:if item in dict_num:
dict_num[item]+=1else:
dict_num[item]=1if dict_num[item]> n //3:
res.add(item)returnlist(res)