主元素(majority number)定義為陣列**現次數嚴格超過一半的數。找到這個數。要求使用o(1)的額外空間和o(n)的時間。
初階:有n個數,其中乙個數的出現次數嚴格超過了一半。求這個數。
高階1:有n個數,其中兩個數的出現次數都超過了⅓ ,求這兩個數。
高階2:有n個數,其中乙個數的出現次數嚴格超過了⅓,並且沒有第二個這樣的數。求這個數
高階3:如果陣列中存在且只存在乙個出現次數嚴格超過1/k的數,找到這個數。要求使用o(k)的額外空間和o(n)的時間。
初階解法:
通過對問題目的性的研究,可以得到這樣的乙個結論:
在元素陣列中,刪去不同的兩個元素,陣列的主元素保持不變。
按照這樣的思路,我們可以不斷縮小問題的規模,最終使問題得解:
設定變數seed用於儲存當前候選元素,初始化為陣列首元素a[0];
設定變數count用於控制候選元素,初始化為1;
從第二個元素a[1]開始遍歷陣列,並與seed相比較:相同,則count加1,讀入下乙個元素;
不同,則count減1,讀入下乙個元素:相當於刪去兩個不同元素,縮小問題規模;如果count小於0則seed不是主元素候選,讀入下乙個元素,count加1;
最後對候選元素進行驗證;
主元素問題
主元素 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 計算遍歷過程...