二分法,套二分法框架即可
二分法 伪代码。。。
int left = 0, right = a.length - 1;
while (left <= right) {
int mid = left + ((right - left) >> 1);
if (a[mid] == mid) {
return mid;
}else if(a[mid] > mid){
right = mid - 1;
}else if(a[mid] < mid){
left = mid + 1;
}
}
return -1;这里的思路是
- 下标也是值, a[index] 一定等于 index
- 如果中间缺失的话 。 a[index] > index 值了,值就一定会在左边。
- 不断缩小左边范围,右边范围, 最后左边跟右边下标相等就是缺失的值
按照这个思路写出如下代码
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 找缺失数字
* @param a int整型一维数组 给定的数字串
* @return int整型
*/
public int solve(int[] a) {
int left = 0, right = a.length - 1;
while (left <= right) {
int mid = left + ((right - left) >> 1);
// 如果相等 一定是在右边 。因为缺失则会 a[index] > index
if (a[mid] == mid) {
left = mid + 1; //缩小左边范围
}else if(a[mid] > mid){
right = mid - 1; // 缩小右边范围
}else if(a[mid] < mid){ //这里是套模板
left = mid + 1;
}
}
return left;
}


京公网安备 11010502036488号