部落格233 尋找出現次數超過一半的數字

2021-10-05 16:38:24 字數 644 閱讀 6022

內容:編寫程式,尋找資料集合**現次數超過一半的數字

思路:

設定乙個計數變數和乙個比較變數,當遇到下乙個數字與比較變數相同,則計數加1,不同則減1。計數減為0

時更新比較變數為新值。因為有乙個數出現次數超過一半,那麼最後比較變數的值就是這個元素,因為它的

出現次數大於一半,因為其它數的出現次數不足以使比較變數能最終停留在它那裡。

**:

#include

intcount

(int a,

int len)

int time =1;

int num =

-a[0];

for(

int i =

1; i < len; i++

)else

if(num == a[i]

)else

}return num;

}int

main()

;printf

("the number is:%d\n"

,count

(a,10))

;}

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

例如 陣列中1出現了5次超過長度9的一半。因此輸出1 注 這裡沒有考慮出現次數最多的數字是0的情況,關鍵在於方法 這裡給出兩種常用方法 這種演算法優點在於理解起來比較容易,如果乙個數出現次數超過長度的一半,那將陣列排序之後位於陣列中間位置的數一定就是要找到的數。注 需要檢測一下中間的數是否是超過一半...

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

分析 最直接的方法,對陣列中所有的數排序,然後再掃瞄一遍,統計各個數出現的次數。如果某個數出現的次數超過一半,則輸出這個數。演算法的時間複雜度是o n log 2n n 如果每次刪除兩個不同的數,那麼,在剩下的數字裡,超過一半的數的個數一樣超過了50 不斷重複這個過程,最後剩下的即 為所求。無需避免...

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

題目 陣列中有乙個數字出現的次數超過了陣列長度的一半,找出這個數字。解法1 將陣列利用快速排序進行排序,因為陣列中有乙個數字出現的次數超過了陣列長度的一半,則排序以後直接取得最中間的那個數字即可!時間複雜度為 o n logn 因為時間主要花費在快速排序上面了!public static int f...