1. 程式人生 > >劍指offer:數組中出現次數超過一半的數字

劍指offer:數組中出現次數超過一半的數字

一次 相同元素 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:數組中出現次數超過一半的數字