LeetCode 34 Find First and Last Position of Element in Sorted Array

235 阅读1分钟

LeetCode 34 Find First and Last Position of Element in Sorted Array

思路

通过二分查找,找到target第一次出现的位置。 再次通过二分查找,找到target最后一次出现的位置。

二分查找统一使用 左闭右开区间 。因此,在第一次查找结束后,需要检查 left >= nums.size() || nums[left] != target,来判断target是否在数组中出现。如果 left >= nums.size() 成立,则target大于nums中的所有元素;如果 nums[left] != target 成立,则target不在数组中。

代码

class Solution {
public:
    vector<int> searchRange(vector<int>& nums, int target) {
        if (nums.empty()) return {-1, -1};

        int left = 0, right = nums.size(), mid;

        while (left < right) {
            mid = left + (right - left) / 2;
            if (nums[mid] < target) left = mid + 1;
            else right = mid;
        }

        if (left >= nums.size() || nums[left] != target) return {-1, -1};
        vector<int> rs{left, -1};

        right = nums.size();

        while (left < right) {
            mid = left + (right - left) / 2;
            if (nums[mid] > target) right = mid;
            else left = mid + 1;
        }
        
        rs[1] = right - 1;
        return rs;
    }
};

补充

二分查找有几种写法?它们的区别是什么?