5、leetcode剑指offer53 二分查找之0~n-1缺失的数字**
生活随笔
收集整理的這篇文章主要介紹了
5、leetcode剑指offer53 二分查找之0~n-1缺失的数字**
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
leetcode劍指offer53 二分查找之0~n-1缺失的數字
一個長度為n-1的遞增排序數組中的所有數字都是唯一的,并且每個數字都在范圍0~n-1之內。在范圍0~n-1內的n個數字中有且只有一個數字不在該數組中,請找出這個數字。
示例 1:
輸入: [0,1,3]
輸出: 2
示例 2:
輸入: [0,1,2,3,4,5,6,7,9]
輸出: 8
文章目錄
- leetcode劍指offer53 二分查找之0~n-1缺失的數字
- 二分法一
- 二分法二
二分法一
這一題和leetcode278第一個錯誤版本很類似leetcode278第一個錯誤版本
public int missingNumber(int[] nums) {int left=0;int right=nums.length-1;//索引范圍在[left,right]//這邊必定要把索引[left,right]中每個都判斷一下,所以不能是<;如果是<,那就少了left==right的情況,里面有個數沒有判斷到。while(left<=right){int mid=(left+right)>>1;if(nums[mid]!=mid){//這邊是重點,不等于為什么不直接返回,因為可能此時的mid并不是第一個缺失的數字,所以還要往前推。right=mid-1;}else{//如果nums[mid]==mid,left必定要mid+1;這肯定沒問題left=mid+1;}}//因為在最后一層循環,left==right,//如果nums[mid]!=mid,right=mid-1,left還是等于mid;//如果nums[mid]==mid,left=mid+1;如果還是不明白可以找個案例走下流程就懂了。return left;//這邊必定返回left}二分法二
方法二就不給很多注釋了,和之前的幾篇二分搜索都差不多,尤其leetcode278第一個錯誤版本很類似leetcode278第一個錯誤版本
public int missingNumber(int[] nums) {int left=0;int right=nums.length;//left==right退出循環while(left<right){int mid=(left+right)>>1;if(nums[mid]!=mid){right=mid;//為了和[left,right)保持一致,這邊right必須等于mid}else{left=mid+1;}}return left; //返回left或者right都可以 }總結
以上是生活随笔為你收集整理的5、leetcode剑指offer53 二分查找之0~n-1缺失的数字**的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 4、leetcode69 x的平方根**
- 下一篇: 6、leetcode34 在排序数组中查