题解 | #查找某个位置#
查找某个位置
https://www.nowcoder.com/practice/fcd66d61e04e476d9bd116ff6b4d04e7
#include <iostream>
#include <vector>
using namespace std;
int findmin(const vector<int>&nums,const int &val){
//左闭右开的区间[1,1)当left==right的时候结束循环
int left=0,right=nums.size();
while(left<right){
int mid=left+(right-left)/2;
//在这里要注意细节题目的要是大于等于最左边的数字
if(nums[mid]>=val){
right=mid;
}else{
left=mid+1;
}
}
//因为是左闭右开区间,所以如果left==nums.size()的话,说明没有找到就返回-1,否则就返回对应的left
if(left!=nums.size()){
return left;
}
return -1;
}
int main() {
int n,val;
cin>>n>>val;
vector<int>arr;
arr.reserve(n);
int temp;
for(int i=0;i<n;i++){
cin>>temp;
arr.push_back(temp);
}
// for(int i=0;i<arr.size();i++){
// cout<<arr[i]<<" ";
// }
cout<<findmin(arr,val);
return 0;
}
#二分查找#
