2018-09-23 13:25:40
主元素問題是乙個非常經典的問題,一般來說,主元素問題指的是陣列中元素個數大於一半的數字,顯然這個問題可以通過遍歷計數解決,時間複雜度為o(n),空間複雜度為o(n)。這樣的演算法有兩個弊端,一是空間複雜度較高,二是沒法處理資料流問題。
因此就有了boyer-moore majority vote algorithm,這個演算法可以用來高效的解決主元素問題,並且空間複雜度降到了o(1),時間複雜度保持不變。
演算法的思路就是將不同的元素進行抵消,最後剩餘的就是最終的結果。
如果說題目中沒有明確說明一定存在主元素,那麼還需要額外一次遍歷來確認當前的解為主元素。
一、主元素問題
問題描述:
問題求解:
public int majorityelement(int nums)二、follow up問題描述:else count--;
}return candidate;
}
問題求解:
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 計算遍歷過程...