摩爾投票法 學習筆記

2021-10-22 21:36:20 字數 945 閱讀 7291

參考資料:

絕對眾數:在序列出現次數 >⌊n

2⌋

> \left\lfloor\dfrac n 2\right\rfloor

>⌊2

n​⌋ 的數。

採用兩兩抵消的思想。因為其它所有數出現加起來都不如絕對眾數多,所以兩兩抵消後,只有最後剩下的可能是區間眾數。時間複雜度 o(n

)o(n)

o(n)

,空間複雜度 o(1

)o(1)

o(1)

。序列 [1,

n]

[1,n]

[1,n

],兩種操作:

區間染色

求區間出現次數大於等於 ⌈p(

r−l+

1)

100⌉

\left\lceil \dfrac \right\rceil

⌈100p(

r−l+

1)​⌉

的數的個數。(稍有變化)

資料保證 ⌊

100p⌋≤

5\left\lfloor \dfrac p \right\rfloor \le 5

⌊p100​

⌋≤5。

參考摩爾投票法的思想,記錄 ⌊

100p

⌋\left\lfloor \dfrac p \right\rfloor

⌊p100​

⌋ 個互不相同的數,每次加入乙個數後,若在記錄的數中已存在,則該數次數加一;否則,將這個數連同每個數(一共 ⌊

100p⌋+

1\left\lfloor \dfrac p \right\rfloor+1

⌊p100​

⌋+1)個數一起抵消。那麼,合法的數一定會到這個序列中來。

這樣想象一下:每個不同的數為一座塔,塔的高度為它的出現次數。每次可以削若干座塔的底部,則超過這個限度的塔一定削不完(反證一下,要是它削完了就沒數剩下了)。

leetcode筆記 1 17 摩爾投票,

陣列中佔比超過一半的元素稱之為主要元素。給定乙個整數陣列,找到它的主要元素。若沒有,返回 1。示例 1 輸入 1,2,5,9,5,9,5,5,5 輸出 5 示例 2 輸入 3,2 輸出 1 示例 3 輸入 2,2,1,1,1,2,2 輸出 2 說明 你有辦法在時間複雜度為 o n 空間複雜度為 o ...

摩爾投票法

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

摩爾投票演算法

在它最簡單的形式就是,查詢最多的元素,也就是在輸入中重複出現超過一半以上 n 2 的元素。如果序列中沒有最多的元素,演算法不能檢測到正確結果,將輸出其中的乙個元素之一。當元素重複的次數比較小的時候,對於流演算法不能在小於線性空間的情況下查詢頻率最高的元素。假設這個陣列中共有n個元素,我們可以把數值不...