尋覓主元素

2022-04-10 08:21:48 字數 1030 閱讀 1143

無意中找到了這篇講解如何尋找主元素的文章,寫得很好,分享一下:

尋找主元素

問題分析:

所謂找主元素,就是在乙個整數序列(陣列)中,裡面的某乙個元素出現的次數

超過元素總個數的一半,那麼就陳這個元素為主元素。

性質1:如果存在主元素的話,主元素一定是中位數

方法1:

使用快排o(nlogn)進行排序,找到中位數,然後判斷首元素是否和中位數相等、以及尾元素是否和中位數相等。 如果有乙個以上的相等,則存在主元素(中位數)。

方法2:

使用o(n)的選擇演算法找到中位數,然後再判斷中位數是不是主元素。

方法3:

性質2:如果乙個陣列中有主元素,則同時刪除兩個不相等的值,這個序列中的主元素不會改變

其中比較好的解決方法是第三種,其實現可用遞迴,也可用迭代,下面**分別給出其實現:

遞迴實現:

//a表示陣列,len表示陣列長度,num用於遞迴

int candidate(int *a,int len,int num)

if(j == len) return c;

else candidate(a,len,j+1);

}void majority_1(int *a,int len)

if(counts > 7/2) cout<

迭代實現:

void majority_2(int *a, int len)

else

count--;}}

// justify seed..

count = 0;

for (int i = 0; i < len; i++)

if (count > len/2)

cout<

測試示例:

int main()

; majority_1(a,7);

majority_2(a,7);

return 0;

}

結果都是輸出:1

尋找主元素

如果乙個陣列a 1.n 中超過半數的元素都相同時,該陣列被稱為含有主元素。演算法思想 利用快速排序的思想,如果這個陣列存在主元素,則它一定為排序後的中位數。但問題是,我們要設計o n 演算法,我們知道,排序的最優時間複雜度是o nlogn 所以我們需要借助其他的方法來完成這個問題。我們可以想到快速排...

搜尋主元素

題目描述 當陣列中每個元素出現的次數大於len 2時,該陣列的主元素就是就是該元素。演算法的設計思想 演算法的策略是從前往後掃瞄陣列元素,標記出乙個可能成為主元素的元素num。然後重新計數,確認num是否是主元素。演算法可分為兩步 1 選取候選的主元素 依次掃瞄所給陣列中的每個整數,將第乙個遇到的整...

主元素演算法

1.演算法描述 演算法分析2.26 大小為n的陣列a,其主元素是乙個出現超過n 2次的元素 從而這樣的元素最多只有乙個 例如,陣列 3,3,4,2,4,4,2,4,4只有乙個主元素4 3,3,4,2,4,4,2,4沒有主元素 求出主元素,沒有請指出 2.書中列出了一種演算法,暫且叫遞迴法,這可以自己...