劍指offer:數組中出現次數超過一半的數字
阿新 • • 發佈:2017-08-26
一次 相同元素 log 由於 個數字 csdn tail 第一個 可能
http://blog.csdn.net/qq_27703417/article/details/70948850
數組中有一個數字出現的次數超過數組長度的一半,請找出這個數字。例如輸入一個長度為9的數組{1,2,3,2,2,2,5,4,2}。由於數字2在數組中出現了5次,超過數組長度的一半,因此輸出2。如果不存在則輸出0。
采用陣地攻守的思想:第一個數字作為第一個士兵,守陣地;count = 1;遇到相同元素,count++;遇到不相同元素,即為敵人,同歸於盡,count--;當遇到count為0的情況,又以新的i值作為守陣地的士兵,繼續下去,到最後還留在陣地上的士兵,有可能是主元素。再加一次循環,記錄這個士兵的個數看是否大於數組一般即可。
public int MoreThanHalfNum_Solution(int [] array) { int length = array.length; int result = array[0]; int time = 1 ; //找數 for (int i = 1 ;i < length ; i++) { if (0 == time) { result = array[i] ; time++ ; } else if (array[i] == result) { time++; } else { time-- ; } }
if(time==0){return 0;}
//數數
int count = 0; for(int i=0;i<array.length;i++){if(array[i]==result){ count++; } if(count>=array.length/2+1) return result; } return 0; }
劍指offer:數組中出現次數超過一半的數字