今日算法之_116__0到n_1中缺失的数字
前言
Github:https://github.com/HealerJean
1、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
1.1、解题思路
二分查找
1.2、算法
public int missingNumber(int[] nums) {
//去除特殊情况
int left = 0 ;
int right = nums.length-1;
//为了保证每个数字都经过遍历,所以 <= 最终的结果肯定是存在的,也就是left > right的时候
while (left <= right) {
int mid = (left + right) / 2 ;
if (mid == nums[mid]){
left = mid +1 ;
}else {
// 永远不会出现mid > nums[mid]的情况,下面表示的是 mid < nums[mid]
right = mid-1;
}
}
return left;
}
1.3、测试
@Test
public void test(){
int[] nums = {0,1} ;
//9 个数字 mid = 4 相等4 则 left = mid +1
//9 个数字 mid = 4 小于5 则 right = mid
//不存在大于
// int[] nums = {0,1,2,3,4,5,6,7,8} ;
System.out.println(missingNumber(nums));
}