题解 | #查找某个位置#

查找某个位置

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

#二分查找#
全部评论

相关推荐

白火同学:1、简历可以浓缩成一页,简历简历先要“简”方便HR快速过滤出有效信息,再要“历”用有效信息突出个人的含金量。 2、教育背景少了入学时间~毕业时间,HR判断不出你是否为应届生。 3、如果你的平台账号效果还不错,可以把账号超链接或者用户名贴到对应位置,一是方便HR知道你是具体做了什么内容的运营,看到账号一目了然,二是口说无凭,账号为证,这更有说服力。
面试被问期望薪资时该如何...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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