問題描述:
在一個有序的數組中尋找出現次數超過一半的那個數
思考:
參考了網上的辦法,忽略兩個不相等的相鄰的數,即一個數i,出現次數爲n>(總數/2),那麼(n-1)>((總數-2)/2),考慮在遍歷數組的時候,使用一個值保存臨時數字出現次數,一個值保存臨時的那個數字,相同就加一,不相同減一,如果被減到0,說明就該用下一個數字作爲有可能是出現次數最多的臨時數字了,時間複雜度爲線性O(N).
代碼:
public class findNumber {
public static void main(String[] args){
int[] data = {1,2,3,2,2,2,5,4,2,3,3,3,3,3,3,3,3,3,3,3};
System.out.println("就是它:" + find(data));
}
public static int find(int[] data){
int count = 1;
int concurrent = data[0];
for(int i = 1 ; i < data.length ; i++){
if(concurrent == data[i]){
count++;
}
else{
count--;
if(count == 0){
concurrent = data[i];
count = 1;
}
}
}
//System.out.println(count);
if(count > 0){
return concurrent;
}
else{
return 0;
}
}
}