求陣列中出現次數超過一半的元素

2021-06-28 12:34:30 字數 492 閱讀 9979

如果可以排序,就先排序,找n/2位置的元素,如果有,那麼這個元素就是,但也有可能沒有,所以要再檢查一遍,該方法的時間複雜度為o(nlogn)。

另外一種方法就是用乙個棧來實現,對於當前元素,若棧空,則入棧,若棧不為空,與棧頂元素比較,相等則入棧,不等則彈出棧頂元素。如果有主元素,最後的棧頂一定是主元素。如果沒有,同上面一樣,最後的棧頂元素不一定是答案,所以最後還要檢查一遍。該方法時間複雜度為o(n),可以只用一些標記來實現棧,因為棧裡只可能有一種元素。空間複雜度可以做到o(1)。

// 找出陣列中出現次數超過一半的元素  

int find(int* a, int n)  

}  } count = 0;//判斷 curvalue 是否為主元素

for(i = 0; i < n; i++)

if(count > n/2)

return curvalue ;  

else 

return -1

;}

陣列中出現超過一半的次數

題目 陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入乙個長度為9的陣列。由於數字2在陣列中出現了5次,超過陣列長度的一半,因此輸出2。如果不存在則輸出0.思路一 把陣列排好序,出現次數超過一半的數一定是排好序陣列的中位數。然後取中位數,計算它出現的次數是否超過陣列長度的一半。...

獲取陣列中出現次數超過一半的元素

根據陣列特點找出o n 的演算法 1.陣列中有乙個數字出現的次數超過陣列長度的一半,也就是說它出現的次數比其他所有的數字出現的次數的和還要多。2.因此我們可以考慮在遍歷陣列的時候儲存兩個值 乙個是陣列中的乙個數字,乙個是次數。3.當我們遍歷到下乙個數字的時候,如果下乙個數字和我們之前儲存的數字相同,...

劍指offer 求陣列中出現次數超過一半的數字

介紹三種時間複雜度和空間複雜度不同的解法。coding utf 8 class solution def morethanhalfnum solution self,numbers write code here 一 雜湊表計數 時間複雜度 o n 空間複雜度 o n num map for i i...