原理: 在一个序列中,两两消除不相同的元素,最后如果存在剩下的元素,那它原本的数量一定超过一半。
理解: 有k个帮派,每个帮派有几个人,大家随机站成一排,一同打擂台。如果擂台上没人(count==0
)那你就站上去成为守擂的人(major=i,count=1
);如果擂台上的人和你处于一个帮派(major==i
),那你就也站上去( count+=1
);如果擂台上的人和你不是一个帮派(major!=i
),那你就杀掉擂台上的一个人(count-=1
)。
也就是说,major是守擂的帮派,count是守擂的人。如果最后还有守擂的人(count>0
),则major获胜。
class Solution:
def majorityElement(self, nums: List[int]) -> int:
major = None
count = 0
if len(nums)==0:
return -1
else:
for i in nums:
if count == 0:
major = i
count += 1
else:
if i == major:
count += 1
else:
count -= 1
if count > 0:
return major
else:
return -1