陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入乙個長度為9的陣列。由於數字2在陣列中出現了5次,超過陣列長度的一半,因此輸出2。如果不存在則輸出0
可以利用累計投票來實現時間複雜度為n的演算法,具體過程如下:
設定flag為第乙個元素,初始化count=1;將後乙個元素與flag比較,並做如下判斷:
1、若下乙個元素與flag相同,count+1;
2、若下乙個元素與flag不同,count-1;
3、若count=0.則更新flag為當前元素,並且重置count=1;
這樣做,遍歷完成後,flag有兩種情況:
1、若存在數字超過一半,則flag必然是這個數字,他不會被最終更新掉
2、若不存在這個數字,則flag為最後乙個元素的值
所以需要下一步判斷,找出flag出現的次數,如果次數超過一半,則返回flag,否則返回0。**如下
class solution };
陣列中出現超過一半的次數
題目 陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入乙個長度為9的陣列。由於數字2在陣列中出現了5次,超過陣列長度的一半,因此輸出2。如果不存在則輸出0.思路一 把陣列排好序,出現次數超過一半的數一定是排好序陣列的中位數。然後取中位數,計算它出現的次數是否超過陣列長度的一半。...
陣列中出現次數超過一半的數字
何海濤 劍指offer 名企面試官精講典型程式設計題 九度oj 題目描述 陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入乙個長度為9的陣列。由於數字2在陣列中出現了5次,超過陣列長度的一半,因此輸出2。輸入 每個測試案例包括2行 第一行輸入乙個整數n 1 n 100000 表...
陣列中出現次數超過一半的數字
陣列中出現次數超過一半的數字 陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入乙個長度為9的陣列。由於數字2在陣列中出現了5次,超過陣列長度的一半,因此輸出2。如果不存在則輸出0。class solution count 0 for auto i numbers if i k ...