题解 | #查找某个位置#
查找某个位置
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; }
#二分查找#