这道题有个经典的解决方式:Moore voting,Moore voting的限制条件为数组中必定存在一个数出现的次数>=n/2。它的基本思想是如果有两个不同的数,则将它们从数组中删除,不影响最后的结果。
因此遍历数组,记录一个candidate以及它出现的次数count。每次遇到=candidate的数,则将count加1,否则将count减1。当count<0时,表示此时可以换一个candidate并重新设置count=1。最后直接输出candidate即可。
class Solution(object):
def majorityElement(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
num = nums[0]
count = 1
for i in range(1, len(nums)):
if nums[i] == num:
count += 1
else:
if count == 0:
num = nums[i]
count = 1
else:
count -= 1
return num