0
点赞
收藏
分享

微信扫一扫

LeetCode_34 在排序数组中查找元素的第一个和最后一个位置

诗远 2022-02-26 阅读 178

1、题目:在排序数组中查找元素的第一个和最后一个位置

 

2、解题思路

        排序数组寻找元素,很容易可以想到可以用二分法进行查找,所以我们分别找到左边界和右边界。二分法最重要的是确定区间,并保持区间的一致性。

3、代码

class Solution {
public:
    vector<int> searchRange(vector<int>& nums, int target) 
    {
        int leftBorder = getLeftBorder(nums, target);
        int rightBorder = getRightBorder(nums, target);

        if (leftBorder == -2 || rightBorder == -2) 
            return {-1, -1};

        if (rightBorder - leftBorder > 1) 
            return {leftBorder + 1, rightBorder - 1};

        return {-1, -1};
    }
private:
     int getRightBorder(vector<int>& nums, int target) 
     {
        int left = 0;
        int right = nums.size() - 1;
        int rightBorder = -2; // 记录一下rightBorder没有被赋值的情况
        while (left <= right) 
        {
            int middle = left + ((right - left) / 2);
            if (nums[middle] > target)
            {
                right = middle - 1;
            } 
            else 
            { // 寻找右边界,nums[middle] == target的时候更新left
                left = middle + 1;
                rightBorder = left;
            }
        }
        return rightBorder;
    }
    int getLeftBorder(vector<int>& nums, int target) 
    {
        int left = 0;
        int right = nums.size() - 1;
        int leftBorder = -2; // 记录一下leftBorder没有被赋值的情况
        while (left <= right) 
        {
            int middle = left + ((right - left) / 2);
            if (nums[middle] >= target) 
            { // 寻找左边界,nums[middle] == target的时候更新right
                right = middle - 1;
                leftBorder = right;
            } 
            else 
            {
                left = middle + 1;
            }
        }
        return leftBorder;
    }
};
举报

相关推荐

0 条评论