12.數組中出現次數超過一半的數字

題目:數組中有一個數字出現的次數超過數組長度的一半,請找出這個數字。例如輸入一個長度爲9的數組{1,2,3,2,2,2,5,4,2}。由於數字2在數組中出現了5次,超過數組長度的一半,因此輸出2。如果不存在則輸出0。

解析:
1.不好表達,直接上代碼

public int MoreThanHalfNum_Solution1(int[] array) {
     if (array == null){
      return 0;
     }
     //保存初始值
     int re = array[0];
     //初始計數爲1
     int count = 1;
     
     for (int i = 1; i < array.length; i++){
      //如果後續值等於前一個值,則計數加1,否則減1
      if (re == array[i]){
       count++;
      }else{
       count--;
      }
      
      if(count == 0){
       re = array[i];
       count = 1;
      }
     }
     //重新開始遍歷re出現的次數
     count = 0;
     for (int i = 0; i < array.length; i++){
      if(re == array[i])
       count++;
     }
     //如果re出現的次數大於數組的長度的一半,返回count
     return count > (array.length/2)?re:0;
    }

2.排序後中間值即爲所求,如果中間值出現的次數大於數組長度的一半,則表明該數字爲需要尋找的數字。

public int MoreThanHalfNum_Solution2(int[] array) {
     if (array == null){
      return 0;
     }
     Arrays.sort(array);//排序
     int mid = array.length/2;
     int count = 0;
     for (int i = 0; i < array.length; i++){
      if (array[i] == array[mid])
       count++;
     }
     return count>mid?array[mid]:0;
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章