摩爾投票法

2021-08-28 16:54:56 字數 1053 閱讀 1759

複雜度時間 o(n) 空間 o(1)

因為多於三分之一的數可能有2兩個,所以需要用兩個值和兩個計數器過一遍,但是最後得出來不一定是兩個數都是多於三分之一,有可能

只有乙個是多於三分之一,但不知道是哪乙個,所以要重新過一遍check一下

思路上一題中,超過一半的數隻可能有乙個,所以我們只要投票出乙個數就行了。而這題中,超過n/3的數最多可能有兩個,所以我們要記錄出現最多的兩個數。同樣的兩個candidate和對應的兩個counter,如果遍歷時,某個候選數和到當前數相等,則給相應計數器加1。如果兩個計數器都不為0,則兩個計數器都被抵消掉1。如果某個計數器為0了,則將當前數替換相應的候選數,並將計數器初始化為1。最後我們還要遍歷一遍陣列,確定這兩個出現最多的數,是否都是眾數。

*/public class solution

else if (c2 == 0)

else

}//因為多於三分之一的數最多可能出現2個,但是你最後通過上面篩選下來的那兩個值不一定都是眾數

//所以需要對這兩個數再審查一遍

摩爾投票法

刷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...

摩爾投票法

提問 給定乙個int型陣列,找出該陣列 現次數最多的int值。解決方案 遍歷該陣列,統計每個int值出現次數,再遍歷該集合,取出出現次數最大的int值。這算是乙個比較經典的解決辦法,其中可能會用到map來做統計。如果不使用map,則時間複雜度會超過線性複雜度。除此之外,也沒有什麼特別好的辦法。今天在...