#include <bits/stdc++.h>
using namespace std;
vector<int> num;
int main()
{
int mid=0,left=0,right=0,n,x;
cin>>n;
for(int i=0;i<n;i++){
cin>>x;
num.push_back(x);
}
int target,result=-1;
cin>>target;
right=num.size()-1;
while(left<=right){
mid=(left+right)/2;
if(num[mid]>=target){
result=mid+1;//因为num数组是从下标0开始的,所以最后的结果需要加一
right=mid-1;//不断缩短右边
}
else if(num[mid]<target){
left=mid+1;//不断扩大左边
}
}
cout<<result;
return 0;
}
注意:
1、此处要注意的是不能只移动left,不移动right,不然求的mid是有问题的。
2、right的值一般设置为数组长度减一,对应循环条件为left<=right,这样就可以防止越界问题。