题目:
剑指 Offer 53 - II. 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 <= 数组长度 <= 10000
思路:
使用二分查找,index和velue不一致为需要找到的值
1.代码如下 MissingNum.java:
package com.yuhl.right.leetcode;
/**
* @author yuhl
* @Date 2020/10/25 7:05
* @Classname Main01
* @Description 剑指 Offer 53 - II. 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 <= 数组长度 <= 10000
*/
public class MissingNum {
public static void main(String[] args) {
int[] nuns = {0, 1, 3};
int res = missingNumber(nuns);
System.out.println(res);
}
//排序过的,使用二分法查找来解决
public static int missingNumber(int[] nums) {
int low = 0;//索引最小值
int hight = nums.length-1;//索引最大值
while(low<=hight){
int middle = low + (hight - low)/2;
if(middle == nums[middle]){//在后半部分找
low = middle + 1;
}else{//在前半部分找
hight = middle -1;
}
}
return low;
}
}
2.执行结果:
"C:\Program Files\Java\jdk1.8.0_201\bin\java.exe"
2