摩爾投票法

2021-10-21 11:47:05 字數 626 閱讀 5950

陣列中佔比超過一半的元素稱之為主要元素。給定乙個整數陣列,找到它的主要元素。若沒有,返回-1。

要完成實現在以上條件完成這個任務,我們需要先了解乙個演算法:摩爾投票法該演算法解決的問題是如何在任意多的候選人(選票無序),選出獲得票數最多的那個。常見的演算法是掃瞄一遍選票,對每個候選人進行統計的選票進行統計。

我們找到兩個不一樣的元素然後相互抵消,最後留下的那乙個元素才有可能會成為主要元素。

//判斷這個元素的數量是否大於整個序列長度的一半

for(

int i=

0;isize()

;i++)}

if(count>=nums.

size()

/2+1

)else}}

;

摩爾投票法

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