主元素問題 Majority Element

2022-08-11 10:00:15 字數 1158 閱讀 2768

2018-09-23 13:25:40

主元素問題是乙個非常經典的問題,一般來說,主元素問題指的是陣列中元素個數大於一半的數字,顯然這個問題可以通過遍歷計數解決,時間複雜度為o(n),空間複雜度為o(n)。這樣的演算法有兩個弊端,一是空間複雜度較高,二是沒法處理資料流問題。

因此就有了boyer-moore majority vote algorithm,這個演算法可以用來高效的解決主元素問題,並且空間複雜度降到了o(1),時間複雜度保持不變。

演算法的思路就是將不同的元素進行抵消,最後剩餘的就是最終的結果。

如果說題目中沒有明確說明一定存在主元素,那麼還需要額外一次遍歷來確認當前的解為主元素。

一、主元素問題

問題描述:

問題求解:

public int majorityelement(int nums) 

else count--;

}return candidate;

}

二、follow up問題描述:

問題求解:

public listmajorityelement(int nums) 

else if (count2 == 0)

else

}listres = new arraylist<>();

count1 = 0;

count2 = 0;

for (int i = 0; i < nums.length; i++)

if (count1 > nums.length / 3) res.add(candidate1);

if (count2 > nums.length / 3) res.add(candidate2);

return res;

}

主元素問題

主元素 majority number 定義為陣列中出現次數嚴格超過一半的數。找到這個數。要求使用o 1 的額外空間和o n 的時間。初階 有n個數,其中乙個數的出現次數嚴格超過了一半。求這個數。高階1 有n個數,其中兩個數的出現次數都超過了 求這兩個數。高階2 有n個數,其中乙個數的出現次數嚴格超...

主元素問題

設a是含有n個元素的陣列,如果元素x在a中出現的次數大於n 2,則稱x是a的主元素。給出乙個演算法,判斷a中是否存在主元素。因為主元素的個數大於n 2,如果兩個不同的元素兩兩抵消,最後若完全抵消,那麼就不存在主元素 若沒有完全抵消,那麼餘下的元素可能就是主元素,因此統計該元素的出現次數,即可判定是否...

主元素問題

主元素問題歡迎來到二陽的學習課堂,咱們先看一看問題描述 1.問題分析 當長度為n的序列a 現次數大於n 2的元素,則此元素為主元素。設主元素出現k次,則其他元素出現次數為n k 二者之差為c 2k n 但c 0時,主元素成立。2.演算法設計 從序列a前端開始遍歷,初始化主元素a a 0 計算遍歷過程...