leetcode_53

 

鏈接

有序就應該要考慮用二分法來降低時間複雜度

這一點自己沒有考慮到

自己原來的代碼

class Solution {
    public int missingNumber(int[] nums) {
        int i;
        for(i = 0; i < nums.length; i++) {
            if(i != nums[i]) {
                break;
            }
        }
        return i;
    }
}
class Solution {
    public int missingNumber(int[] nums) {
        // 對於有序的數組,大小爲i的數位置應該在nums[i]的位置上,如果不在則說明在i之前發生
        // 了錯位
        int left = 0;
        int right = nums.length -1;
        while(left < right ) {
            int mid = (left + right )/2;
            if( mid != nums[mid] ) {
                right = mid;
            } else {
                left = mid + 1;
            }          
        }
        // left會停在缺少的那一個數字上
        // 例外情況:如果0到n-1都不缺少值,那麼缺少的就是n
        return left == nums.length -1 && nums[left] == left ? left+1:left;
        
    }
}

這是改爲用二分之後的代碼

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章