前言
刷了那麼多題,昨天竟然被問住了!!恥辱啊!!!!今天起刷題flag復活!!!!
題目描述
一個長度爲n-1的遞增排序數組中的所有數字都是唯一的,並且每個數字都在範圍0~n-1之內。在範圍0~n-1內的n個數字中有且只有一個數字不在該數組中,請找出這個數字。
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/que-shi-de-shu-zi-lcof
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。
解題思路
- 二分查找,縮小查找範圍
- 因爲不存在數字重複出現的可能,所以不存在nums[i] < i的情況
- 如果nums[i] == i,則說明從start到i都是拍好的,start=i+1
- 如果nums[i] > i,則說明i之前少了數字,所以缺失的數字在start和i之間,所以end=i;
- 循環結束條件是start == end也就說直到找到start和end重合的這一位,也沒找到想要的數字,則這一位就是缺失的那位,返回start。
代碼
class Solution {
public int missingNumber(int[] nums) {
int start = 0, end = nums.length;
while(start < end){
int mid = (start + end) / 2;
if(nums[mid] > mid){
end = mid;
} else {
start = mid+1;
}
}
return start;
}
}