题意:已知一个有序数列1-n(元素值)中缺少了一个元素,找出这个元素。
1、异或可解 时间复杂度O(n)
2、二分 时间复杂度O(lgn)
代码如下:
//二分查找有序数组中缺失的一个元素,时间复杂度尽可能低
int bsearch(int a[],int left,int right){
while(left<=right){
int mid=left+(right-left)/2;
//这种情况说明缺失的元素在前面
if(a[mid]==mid+2)
right=mid-1;
//这种情况说明确实的元素在后面
else if(a[mid]==mid+1)
left=mid+1;
}
return left+1;
}
int findMis(int a[],int n){
return bsearch(a,0,n-2);
}
int main(){
int a[]={1,2,3,5};
cout<<findMis(a,sizeof(a)/sizeof(int)+1);
system("pause");
return 0;
}