有序就应该要考虑用二分法来降低时间复杂度
这一点自己没有考虑到
自己原来的代码
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;
}
}
这是改为用二分之后的代码