維護候選眾數candidate
以及該候選的出現次數count
;
初始化:candidate
為任意值,count
為0;
遍歷陣列nums
, 對於每個元素x
:
1). 若count == 0
,則candidate = x
;
2). 若x == candidate x
,則count++
;否則count--
;
遍歷完成後,candidate
即為整個陣列nums
的眾數。
class
solution
:def
majorityelement
(self, nums)
: count =
0 candidate =
none
for num in nums:
if count ==0:
candidate = num
count +=(1
if num == candidate else-1
)return candidate
1. leetcode
2. 知乎
Boyer Moore 投票演算法
刷題過程中遇到的乙個非常巧妙的演算法。是出現在 求陣列 現超過一半的數字 這道題中。陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。你可以假設陣列是非空的,並且給定的陣列總是存在多數元素。例項1輸入 1,2,3,2,2,2,5,4,2 輸出 2 1 陣列長度 50000 思路 如果把陣...
Boyer Moore 投票演算法
有以下問題 給定乙個大小為 n 的陣列,找到其中的多數元素。多數元素是指在陣列 現次數 大於 n 2 的元素。你可以假設陣列是非空的,並且給定的陣列總是存在多數元素。比較容易想到的解法是用雜湊表對每個數出現的次數進行儲存,然後就可以找出次數最多的那個數了。這樣做的時間和空間複雜度都是 o n o n...
摩爾 Boyer Moore 投票法
該演算法用來尋找乙個陣列 現次數超過1 k的元素,易得滿足要求的元素最多有k 1個。摩爾投票法分為兩個階段 抵消階段和計數階段。抵消階段 兩個不同投票進行對坑,並且同時抵消掉各一張票,如果兩個投票相同,則累加可抵消的次數 計數階段 在抵消階段最後得到的抵消計數只要不為0,那這個候選人是有可能超過一半...