【leetcode-35】【二分系列】面試題53 - II. 0~n-1中缺失的數字

前言

刷了那麼多題,昨天竟然被問住了!!恥辱啊!!!!今天起刷題flag復活!!!!

題目描述

一個長度爲n-1的遞增排序數組中的所有數字都是唯一的,並且每個數字都在範圍0~n-1之內。在範圍0~n-1內的n個數字中有且只有一個數字不在該數組中,請找出這個數字。

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/que-shi-de-shu-zi-lcof
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。

解題思路

  1. 二分查找,縮小查找範圍
  2. 因爲不存在數字重複出現的可能,所以不存在nums[i] < i的情況
  3. 如果nums[i] == i,則說明從start到i都是拍好的,start=i+1
  4. 如果nums[i] > i,則說明i之前少了數字,所以缺失的數字在start和i之間,所以end=i;
  5. 循環結束條件是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;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章