求陣列主元素的O n 演算法

2022-06-11 19:36:12 字數 705 閱讀 1451

在乙個規模為n的陣列a[n]中,所謂主元素就是出現次數大於n/2的元素,例如 3.3.4.2.4.4.2.4.4  有乙個主元素為4。

充分利用主元素的出現次數大於n/2這個已知條件,因為主元素的出現次數大於n/2,所以容易證明下面的解法是正確的:

首先假設主元素是x,則遍歷陣列時出現與x相等的元素時,x出現的數目+1,不相等時,如果計數值變為1,則這個x可能不是主元素,需要將假定值更改為新出現的元素,計數值不為1時,則x出現的數目-1.遍歷完後的x就是主元素的可能值。複雜度為o(n)。

其**如下:

1 #include 2

3using

namespace

std;45

intget(int a, intn)6

19else

20 cnt--;21}

22 cnt=0;23

for(int i=0; i)

2428

29if(cnt>(n/2

))30

return

result;

31else

32return -1;33

}343536

intmain()37;

39 cout << get(a, 9

);40

4142

return0;

43 }

主元素演算法

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.書中列出了一種演算法,暫且叫遞迴法,這可以自己...

分治演算法求陣列第k小元素

在 陣列s中查詢第k小的元素並輸出 分治演算法 將s分為多個組q,每組5個元素,有剩餘的話,則排序剩餘元素。將q個組單獨排序,每組找出中項,中項組成集合m,以m中項n作為標準,將s劃分為兩個子陣列s1和s2,把這個陣列中比n小的都放入s1的陣列中,陣列s1的元素個數是 s1 個 把這個陣列中比n大的...

陣列的主元素查詢

描述 已知乙個整數序列a a0,a1,an 1 其中0 ain 2 0 pk注意學習這裡用陣列儲存另乙個陣列相同元素資訊的方法。include define maxsize 100 using namespace std 陣列中某數相等的數過半,稱之為主要元素 好好學習此方法 void mainel...