在乙個規模為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 23using
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...