內容:編寫程式,尋找資料集合**現次數超過一半的數字
思路:
設定乙個計數變數和乙個比較變數,當遇到下乙個數字與比較變數相同,則計數加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...