题目:一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0到n-1之内。在范围0到n-1的n个数字中有且只有一个数字不在该数组中,请找出这个数字。
解析:因为是有序数组,用二分查找找到第一个下标不等的数组即可。
#include <iostream>
#include <vector>
using namespace std;
int findMissNum(const vector<int> &vec){
int low = 0,high = vec.size()-1;
while(low <= high){
int mid = (low + high)/2;
if(vec[mid] != mid){
if(mid == 0 || vec[mid-1] == mid-1)
return mid;
else
high = mid - 1;
}
else
low = mid + 1;
}
return -1;
}
int main(){
vector<int> vec{0,1,2,3,4,6,7,8};
cout<<findMissNum(vec)<<endl;
}