LeetCode 34. Search for a Range

来源:互联网 发布:淘宝抢购 编辑:程序博客网 时间:2024/05/18 21:43

问题

https://leetcode.com/problems/search-for-a-range/

解决方法

二分查找,首先找到左边界,然后找到右边界。
查找左边界时,我们首先默认R是大于等于target的,然后需要查找[L, R-1] 处小于等于target 的最小位置并赋给R,最后比较R处是否等于target判断是否找到target;
查找右边界时, 首先默认L处是小于等于target的, 然后需要查找[L+1, R] 中小于等于target 的最大值赋给L;

class Solution {public:    vector<int> searchRange(vector<int>& nums, int target) {        int L, R;        vector<int> ret(2,-1);        // find left pos;        L = 0; R = nums.size()-1;        while(L<R){ // find range [L, R-1];            int m = L+(R-L)/2;            if (target <= nums[m])                R = m;            else                L= m+1;        }        if (nums[R] != target)            return ret;        else            ret[0] = R;        L =R; R = nums.size()-1;        while(L<R){            int m = L+(R-L+1)/2;// find range [L+1, R];            if (nums[m] <= target)                L= m;            else                R= m-1;        }        ret[1] = L;        return ret;    }};
0 0
原创粉丝点击