二分查找大于等于

2022-07-06  本文已影响0人  help_youself
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
class Solution {
public:
    int binary_search(std::vector<int>&num,int left,int right,int t){
        while(left<=right){
            int mid=(left+right)/2;
            if(t==num.at(mid)){
                return mid;
            }else if(num.at(mid)<t){
                left=mid+1;
            }else{
                right=mid-1;
            }
        }
        return -1;
    }
    int locate_geq(std::vector<int> &num,int t){
        int n=num.size();
        int left=0,right=n-1;
        if(num[left]>=t){
            return 0;
        }
        if(num[right]<t){
            return -1;
        }
        while(left<right){
            int mid=(right+left)/2;
            if(num.at(mid)>=t){
                right=mid;
            }else{
                left=mid+1;
            }
        }
        return left;
    }
};
int main(){
    std::vector<int> data={-10,-8,1,3,5,6};
    std::sort(data.begin(),data.end());
    Solution so;
    int r=so.locate_geq(data,6);
    std::cout<<r<<std::endl;
    r=so.binary_search(data,0,data.size()-1,3);
    std::cout<<r<<std::endl;
    return 0;
}

[1] C++STL中的upper_bound()函数的使用

上一篇 下一篇

猜你喜欢

热点阅读