剑指Offer53(2) 0到n-1中缺失的数字

题目:一个长度为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;
	
} 

猜你喜欢

转载自blog.csdn.net/qq_29762941/article/details/89648358
今日推荐