摩爾投票法

2021-10-05 03:43:12 字數 850 閱讀 9906

摩爾投票法的基本思想很簡單,在每一輪投票過程中,從陣列中找出一對不同的元素,將其從陣列中刪除。這樣不斷的刪除直到無法再進行投票,如果陣列為空,則沒有任何元素出現的次數超過該陣列長度的一半。如果只存在一種元素,那麼這個元素則可能為目標元素。

想一想也好理解,如果陣列中有個元素個數多於一半,那麼只要找到乙個和它不同的就減去乙個,那麼和它不同的元素個數必然是小於它的個數,那麼最後全部找完後剩下的元素就是要找的元素。

例如現在陣列為[1,

2,1,

3,1,

1,1,

2]

[1,2,1,3,1,1,1,2]

[1,2,1

,3,1

,1,1

,2],設定陣列res用於存放可能是結果的元素,使用count來記錄res中當前元素剩下的個數,依次遍歷陣列:

實現**:

class

solution

(object):

defmajorityelement

(self, nums)

: res =

0 count =

0for n in nums:

if count ==0:

major = n

if n == major:

count = count +

1else

: count = count -

1return major

如何理解摩爾投票演算法?

**摩爾投票法

摩爾投票法

刷leetcode看到的一種解法。想法其實很簡單。上網上看了下這種解法叫摩爾投票法。其實就是找array裡的眾數,原理也很簡單,例如你要找2 n多的數你找眾數,那他個數肯定不小於2 n,然後你加加減減 最後留下那個肯定是眾數。3 n 什麼的情況也一樣,畫一畫就明白了。然後這是別人的解析 摩爾投票法 ...

摩爾投票法

該演算法用於解決尋找乙個含有 n n 個元素的數列 role presentation 中出現超過1k 1 k 即大於nk n k次 的元素 假設滿足要求的元素存在 可知,滿足要求的元素最多有 k 1 k 1 個。使用暴力解法並不難,但是摩爾投票法給出了乙個o n o n 時間複雜度的解法。當k 2...

摩爾投票法

複雜度時間 o n 空間 o 1 因為多於三分之一的數可能有2兩個,所以需要用兩個值和兩個計數器過一遍,但是最後得出來不一定是兩個數都是多於三分之一,有可能 只有乙個是多於三分之一,但不知道是哪乙個,所以要重新過一遍check一下 思路上一題中,超過一半的數隻可能有乙個,所以我們只要投票出乙個數就行...