题目链接:
题目截图:
未看题解前想法:
元素存在重复性,仅返回重复次数大于[n/2]的元素。
考虑到哈希表特性:单一元素对应一个数值,遍历一次,记录元素的出现次数。
在遍历过程中对其判断是否大于[n/2],(个人其实有点担心多个大于n/2,后来发现是自己脑子抽了,哈哈哈哈哈哈)
未看题解前的代码:
class Solution:
def majorityElement(self, nums: List[int]) -> int:
N = len(nums)/2
Map = {} #空哈希表
Num = 0
for i in nums:
if i not in Map:
Map[i] = 1
else:
Map[i]+=1
if Map[i]>N :
Num=i
return Num
通过图:
看题解后:
个人觉得摩尔投票法,方法好用,易于理解
class Solution:
def majorityElement(self, nums: List[int]) -> int:
#摩尔投票法
#思路是若Max空缺,遇到第一个元素为Max,Max_num随即为1
#若遇到同样元素Max_num+1,不同元素则Max_num-1
Max = 0
Max_num = 0
for i in nums:
if Max_num == 0 :
Max = i
if Max == i:
Max_num += 1
else :
Max_num -= 1
return Max