力扣第34题.在排序数组中查找元素的第一个和最后一个位置

class Solution {

public:

    vector<int> searchRange(vector<int>& nums, int target) {

        int res1 = binary_search1(nums,nums.size(),target);

        int res2= binary_search2(nums,nums.size(),target);

        return {res1, res2};

    }

    int binary_search1(const std::vector<int>& q ,int len ,int  x){

        int l = -1,r = len;

        while(l+1<r){

            int mid = (l+r)/2;

            if(isBlue1(q[mid],x)){

                l = mid;

            } else{

                r = mid;

            }

        }

        if(r < len && q[r] ==x) return r;

        return -1;

    }

    bool isBlue1(int num,int x){

        return num<x;

    }

    int binary_search2(const std::vector<int>& q, int len,int x){

        int l=-1,r=len;

        while(l+1<r){

            int mid=(l+r)/2;

            if(isBlue2(q[mid],x)){

                l=mid;

            }else{

                r=mid;

            }

        }

        if(l>=0 && q[l]==x) return l;

        return -1;

    }

    bool isBlue2(int num,int x){

        return num<=x;

    }

};

c++算法实现,通过蓝红边界,判断题目所需条件是在边界线以左还是以右,isBlue中的条件就是都是<或者<=某个数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值