Boyer Moore 投票演算法

2021-10-21 06:30:34 字數 534 閱讀 9659

有以下問題:

給定乙個大小為 n 的陣列,找到其中的多數元素。多數元素是指在陣列**現次數 大於 ⌊ n/2 ⌋ 的元素。你可以假設陣列是非空的,並且給定的陣列總是存在多數元素。
比較容易想到的解法是用雜湊表對每個數出現的次數進行儲存,然後就可以找出次數最多的那個數了。這樣做的時間和空間複雜度都是 o(n

)o(n)

o(n)

但是這並不是最優解

演算法的基本思路為:

public

intmajorityelement

(int

nums)

if(candidate==i)

else

}return candidate;

}

此演算法的時間複雜度為 o(n

)o(n)

o(n)

, 空間複雜度為 o(1

)o(1)

o(1)

Boyer Moore 投票演算法

刷題過程中遇到的乙個非常巧妙的演算法。是出現在 求陣列 現超過一半的數字 這道題中。陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。你可以假設陣列是非空的,並且給定的陣列總是存在多數元素。例項1輸入 1,2,3,2,2,2,5,4,2 輸出 2 1 陣列長度 50000 思路 如果把陣...

摩爾 Boyer Moore 投票法

該演算法用來尋找乙個陣列 現次數超過1 k的元素,易得滿足要求的元素最多有k 1個。摩爾投票法分為兩個階段 抵消階段和計數階段。抵消階段 兩個不同投票進行對坑,並且同時抵消掉各一張票,如果兩個投票相同,則累加可抵消的次數 計數階段 在抵消階段最後得到的抵消計數只要不為0,那這個候選人是有可能超過一半...

Boyer Moore 投票演算法求過半數

維護候選眾數candidate以及該候選的出現次數count 初始化 candidate為任意值,count為0 遍歷陣列nums,對於每個元素x 1 若count 0,則candidate x 2 若x candidate x,則count 否則count 遍歷完成後,candidate即為整個陣...