尋找陣列中的主要元素

2021-07-28 22:53:43 字數 979 閱讀 2639

對於乙個大小為n的整數陣列,將其中出現次數大於n/2的元素稱為主要元素,例如中主要元素是5,而中則沒有。

似乎是乙個統計陣列元素出現次數的問題,因此尋找出現次數最多的元素的解法在這裡也適用。

不過該問題有乙個特點:即要求元素出現次數過半。因此,如果存在這樣的主要元素x,將它與陣列所有元素進行比較,相等則將一計數器(初始化為0)+1否則-1,這樣相消相殺後計數器必然大於0。

但現實是並不知道這個主要元素x是多少,那麼可以先假設x為陣列中任意元素,並先將這個假設的x與第乙個元素進行比較,相等則將計數器(初始化為0)+1否則將第乙個元素設為x,繼續與第二個元素比較,相等則將計數器+1否則-1,若此時計數器為0不夠減,則將x設為第二個元素繼續與下個元素比較,依次類推......直到最後乙個元素。最終的x即為主要元素。

在假定存在主要元素時,我們可以得到這樣乙個x,再遍歷一次陣列便可驗證其是否真的存在。

#include int majorelement(int array,int n);

int main(void)

; int array2[7]=;

int array3[8]=;

int array4[8]=;

int array5[8]=;

printf("%d %d %d %d %d\n",majorelement(array1,8),majorelement(array2,7),\

majorelement(array3,8),majorelement(array4,8),majorelement(array5,8));

return 0;

}int majorelement(int array,int n)

在陣列中尋找主要元素

來自 資料結構與演算法分析 c語言描述 練習2.19 問題描述 大小為 n 的陣列 a 其主要元素是乙個出現次數超過 n 2 的元素 從而這樣的元素最多有乙個 例如,陣列 3,3,4,2,4,4,2,4,4 有乙個主要元素4,而陣列 3,3,4,2,4,4,2,4 沒有主要元素。題目給了一種遞迴的演...

尋找陣列元素中的最值

假設第乙個元素的值最大 用第二個和第乙個比較,如果第二個大,說明第二個是已知最大值 用第三個和已知最大的比,如果第三個大,說明第三個是已知最大的 以此類推,直到所有元素都比較完。同理可求最小值 public class maxofarray 遍歷輸出陣列元素 for int index 0 inde...

尋找陣列中第n大的元素

給定乙個陣列,找出該陣列中第n大的元素的值。其中,1 n length。例如,給定乙個陣列a 當n 1時,返回9。我拿到這個問題的地中思路就是先排序,然後通過位置索引相應的第n大的元素。我使用的是o nlog n 級別的排序演算法,所以這種方法的時間複雜度應該也是o nlog n 級別的。那這個問題...