题解 | #查找某个位置#

查找某个位置

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;
}

#二分查找#
全部评论

相关推荐

06-05 19:46
已编辑
武汉大学 后端
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务