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

思路:保存數字中一個值和次數,當遍歷到下個數字時,如果和保存數字相同次數加1,否則次數減1,當次數爲0,則保存下一個數字,並把次數設爲1,因爲要找的數字次數超過一半,那麼最後一個保存的數字一定就是要找的數字。

public class MoreThanHalfNum {     
    /**
     * 需找次數超過一半數字
     * @param nums
     * @param length
     * @return
     */
    public static int findNum(int nums[],int length){
        if(nums==null||length<=0){
            return 0;
        }
        int result=nums[0];
        int time=1;

        for(int i=1;i<length;i++){
            if(time==0){//等於0時,把下一個數賦給result,time設爲1
                result=nums[i];
                time++;
            }
            if(result==nums[i]){//相等次數加1
                time++;
            }
            else{//不等次數減1
                time--;
            }
        }
        if(!checkResult(nums, length, result)){
            return 0;
        }
        return result;
    }

    /**
     * 判斷結果是否正確
     * @param nums
     * @param length
     * @param number
     * @return
     */
    public static boolean checkResult(int nums[],int length,int number){
        int time=0;
        for(int i=0;i<length;i++){
            if(number==nums[i]){
                time++;
            }
          }
            boolean isMoreThanHalf=true;
            if(time*2<=length){//判斷數字的次數是否超過總數一半
                isMoreThanHalf=false;
            }
            return isMoreThanHalf;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章