Boyer Moore 投票演算法求過半數

2021-10-11 02:02:18 字數 734 閱讀 1512

維護候選眾數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,那這個候選人是有可能超過一半...