有序就應該要考慮用二分法來降低時間複雜度
這一點自己沒有考慮到
自己原來的代碼
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;
}
}
這是改爲用二分之後的代碼