摩爾投票法在LeetCode169中的應用

2021-10-22 07:01:52 字數 658 閱讀 1144

leetcode 169. 多數元素

給定乙個大小為 n 的陣列,找到其中的多數元素。多數元素是指在陣列**現次數 大於 ⌊ n/2 ⌋ 的元素。

你可以假設陣列是非空的,並且給定的陣列總是存在多數元素。

示例 1:

輸入:[3,2,3]

輸出:3

示例 2:

輸入:[2,2,1,1,1,2,2]

輸出:2

**:

class

solution

}return candidate;

}}

維護乙個cnt,為票數。假設第乙個數為candidate,那麼先計票數為1,每次遇到下乙個數,如果和candidate相同,那麼cnt加一,否則cnt減一。

每次cnt等於零時,說明:

那麼問題就簡化為,在餘下未遍歷的部分尋找出眾數。

因此,對於某個選定的candidate,有以下兩種情況:

摩爾投票法

刷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一下 思路上一題中,超過一半的數隻可能有乙個,所以我們只要投票出乙個數就行...