一、題目
陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入乙個長度為9的陣列。由於數字2在陣列**現了5次,超過陣列長度的一半,因此輸出2。如果不存在則輸出0。
二、思路
解法一:
陣列排序後,如果符合條件的數存在,則一定是陣列中間那個數。(比如:1,2,2,2,3;或2,2,2,3,4;或2,3,4,4,4等等)。
解法二:
採用陣地攻守的思想:
(1)第乙個數字作為第乙個士兵,守陣地;count = 1;
(2)遇到相同元素,count++;
(3)遇到不相同元素,即為敵人,同歸於盡,count--;當遇到count為0的情況,又以新的i值作為守陣地的士兵,繼續下去,到最後還留在陣地上的士兵,有可能是主元素。
(4)再加一次迴圈,記錄這個士兵的個數看是否大於陣列長度的一半即可。
三、**
解法一**:
publicview codeclass
solution
//排序
arrays.sort(array);
//取中間的值
int val=array[(array.length-1)/2];
int count=0;
//統計中間數字出現的次數
for(int i=0;i)
}//返回結果
return count>(array.length/2)?val:0;}}
解法二**:
/**view code* 採用陣地攻守的思想:
* (1)第乙個數字作為第乙個士兵,守陣地;count = 1;
* (2)遇到相同元素,count++;
* (3)遇到不相同元素,即為敵人,同歸於盡,count--;當遇到count為0的情況,又以新的i值作為守陣地的士兵,繼續下去,到最後還留在陣地上的士兵,有可能是主元素。
* (4)再加一次迴圈,記錄這個士兵的個數看是否大於陣列長度的一半即可。 */
public
class
solution
if (array[i] ==num)
else
}//再加一次迴圈,記錄這個士兵的個數看是否大於陣列長度的一半即可
int count2=0;
for(int i=0;i)
}//返回結果
return count2>(array.length/2)? num:0;}}
劍指offer第二十八題
題目描述 陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入乙個長度為9的陣列。由於數字2在陣列 現了5次,超過陣列長度的一半,因此輸出2。如果不存在則輸出0。思路 看到這個題目,我腦子裡第乙個蹦出來的思路是用樹來解決,因為這個題目是要記錄鍵對應的值,記錄完了過後再去查詢鍵對應的...
《劍指offer》第二十八題(對稱的二叉樹)
面試題28 對稱的二叉樹 題目 請實現乙個函式,用來判斷一棵二叉樹是不是對稱的。如果一棵二叉樹和 它的映象一樣,那麼它是對稱的。include include binarytree.h bool issymmetrical binarytreenode proot1,binarytreenode p...
二十八 python3 之random
1 隨機小數 import random print random.random 隨機大於0 且小於1 之間的小數 0.9441832228391154 print random.uniform 0,9 隨機乙個大於0小於9的小數 結果 7.646583891572416 2 隨機整數 print ...