主元素問題

2021-08-17 22:57:21 字數 901 閱讀 8196

設a是含有n個元素的陣列,如果元素x在a中出現的次數大於n/2,則稱x是a的主元素。給出乙個演算法,判斷a中是否存在主元素。

因為主元素的個數大於n/2,如果兩個不同的元素兩兩抵消,最後若完全抵消,那麼就不存在主元素;若沒有完全抵消,那麼餘下的元素可能就是主元素,因此統計該元素的出現次數,即可判定是否存在主元素。

演算法:findmain_3(a,n)

輸入:陣列a,大小n

輸出:是否存在主元素

count<-1

x<-a[1]

for i=2 to n do

if count=0

then x<-a[i]

if a[i]=x then count<-count+1

else count<-count-1

if count=0 then return false  //完全抵消,不存在主元素

else

count<-統計x出現的次數

if count>n/2 then return true

else return false

/*****************************************

function:findmain_1

description:通過兩兩抵消的方法找主元素

input:陣列a,陣列大小n

output:是否存在主元素

******************************************/

bool findmain_1(int a,int n)

}

抵消的過程中掃瞄了整個陣列,其時間複雜度為o(n);統計x出現的次數再次掃瞄整個陣列,其時間複雜度同為o(n)。因此,整個演算法的時間複雜度為t(n)=o(n)+o(n)=o(n).

主元素問題

主元素 majority number 定義為陣列中出現次數嚴格超過一半的數。找到這個數。要求使用o 1 的額外空間和o n 的時間。初階 有n個數,其中乙個數的出現次數嚴格超過了一半。求這個數。高階1 有n個數,其中兩個數的出現次數都超過了 求這兩個數。高階2 有n個數,其中乙個數的出現次數嚴格超...

主元素問題

主元素問題歡迎來到二陽的學習課堂,咱們先看一看問題描述 1.問題分析 當長度為n的序列a 現次數大於n 2的元素,則此元素為主元素。設主元素出現k次,則其他元素出現次數為n k 二者之差為c 2k n 但c 0時,主元素成立。2.演算法設計 從序列a前端開始遍歷,初始化主元素a a 0 計算遍歷過程...

主元素問題 Majority Element

2018 09 23 13 25 40 主元素問題是乙個非常經典的問題,一般來說,主元素問題指的是陣列中元素個數大於一半的數字,顯然這個問題可以通過遍歷計數解決,時間複雜度為o n 空間複雜度為o n 這樣的演算法有兩個弊端,一是空間複雜度較高,二是沒法處理資料流問題。因此就有了boyer moor...