讨论/题目交流/34. 在排序数组中查找元素的第一个和最后一个位置/
34. 在排序数组中查找元素的第一个和最后一个位置

有没有兄弟帮我看看是哪里错了

class Solution {
public:
    vector<int> searchRange(vector<int>& nums, int target) {
        int n = nums.size();
        vector<int> res(2, -1);
        if(n == 0) return res;
        int l = 0, r = n - 1;
        while(l <= r){
            int m = l + (r - l) / 2;
            if(nums[m] == target){
                int i = m, j = m;
                while(nums[i] == target && i >= l) --i;
                while(nums[j] == target && j <= r) ++j;
                res[0] = i + 1;
                res[1] = j - 1;
                break;
            }else if(nums[m] > target){
                r = m - 1;
            }else{
                l = m + 1;
            }
        }
        return res;
    }
};

批注 2020-05-07 113519.png

展开讨论

1、判断条件顺序改一下,如果先判断是否等于target,会越界,先判断 i >=l && ==target.
2、这样你的返回条件就需要改了,如果第一个或者最后一个值是target就不需要加1了。
3、二分法有找边界的修改,可以去搜一下,《二分法查找左边界,右边界》,我整理了一篇博客,看看有没有缘分可以被你搜到。

1
展开全部 3 讨论