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

题目链接:https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array/
在这里插入图片描述
与典型二分不同,搜到之后还要接着搜。最开始我的思路是搜到一个之后在两边继续二分,但是这样太乱了。之后受启发可以分别求两端点,定义一个二分函数,找到之后根据参数确定下一步往哪边继续搜索。

代码如下:

class Solution {
public:
    int B_S(vector<int> nums, int target, bool way) {
        bool found = false;		//找到了要记录,否则最后返回-1
        int l = 0, r = nums.size() - 1;
        while(l <= r) {
            int mid = (l + r) / 2;
            // way = true表示寻找左端点,= false表示寻找右端点
            if((nums[mid] == target && way) || nums[mid] > target) {
                if(nums[mid] == target) {
                    found = true;
                }
                r = mid - 1;
            } else {
                if(nums[mid] == target) {
                    found = true;
                }
                l = mid + 1;
            }
        }
        return found ? (way ? l : r) : -1;
    }
    
    vector<int> searchRange(vector<int>& nums, int target) {
        vector<int> res;
        res.push_back(B_S(nums, target, true));
        res.push_back(B_S(nums, target, false));
        return res;
    }
};

猜你喜欢

转载自blog.csdn.net/weixin_42396397/article/details/105940663