先給出做法
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\)一定是主元素