搜尋主元素

2021-07-13 18:32:57 字數 821 閱讀 9793

題目描述: 當陣列中每個元素出現的次數大於len/2時,該陣列的主元素就是就是該元素。

演算法的設計思想:演算法的策略是從前往後掃瞄陣列元素,標記出乙個可能成為主元素的元素num。然後重新計數,確認num是否是主元素。

演算法可分為兩步:

(1)選取候選的主元素:依次掃瞄所給陣列中的每個整數,將第乙個遇到的整數num儲存到c中,記錄num出現的次數為1;若遇到

下乙個整數仍等於num,則計數加1,否則計數減1;當計數減到0時,將遇到的下乙個整數儲存到c中,計數重新記為1,

開始新一輪的計數,即從當前位置開始重複上述過程,知道掃瞄完全部的陣列元素。

(2)判斷c中元素是否是真正的主元素:再次掃瞄該陣列,統計c中元素出現的次數,若大於len/2,則為主元素;否則,序列中不存在主元素。

**:#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using namespace std;

typedef long long ll;

int fun(int* a,int len)

else

}        

}count=0;

for(int i=0;ilen/2)

return -1;    

}int main()

; int len=12;

cout<

尋找主元素

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

主元素演算法

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

尋覓主元素

無意中找到了這篇講解如何尋找主元素的文章,寫得很好,分享一下 尋找主元素 問題分析 所謂找主元素,就是在乙個整數序列 陣列 中,裡面的某乙個元素出現的次數 超過元素總個數的一半,那麼就陳這個元素為主元素。性質1 如果存在主元素的話,主元素一定是中位數。方法1 使用快排o nlogn 進行排序,找到中...