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;
        
    }
}

这是改为用二分之后的代码

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