先给出做法
m,cnt = 0,0
for n in a:
if cnt == 0:
m = n
cnt = 1
elif n == m:
cnt += 1
else:
cnt -= 1
return m
讲一下正确性
我们将上述看成配对操作,对于cnt==0
的这个if和n==m
的这个if,我们认为是新创建了一个对,目前这个对只有第一分量,即当前的m
;对于最后一个else
,我们认为是用当前的n
去与当前的m
配对(即填充第二分量),那么最终遍历完之后就会得到一些二元组,这些二元组的第一第二分量都不相等
如果最后的\(m\)不是主元素(假设存在主元素),那么这个\(m\)会单独成对,原数组的主元素一定是会与其他元素配对的,但是主元素的个数已经超过一半了,不可能满足与其他元素配对,所以最后的\(m\)一定是主元素
标签:cnt,二元,元素,摩尔,else,投票,配对,分量 From: https://www.cnblogs.com/dingxingdi/p/18164374