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

给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。
candidates 中的 同一个 数字可以 无限制重复被选取 。如果至少一个数字的被选数量不同,则两种组合是不同的。

如果数组中不存在目标值 target,返回 [-1, -1]。

你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。

方法一:二分查找

class Solution {
public:
    vector<int> searchRange(vector<int>& nums, int target) {
        if (nums.size() == 0) return {-1,-1};
        vector<int> ans;
        int l = -1,r = nums.size();
        int l_a = -1,r_a = -1;
        while (l+1 < r) {
            int mid = (l+r)/2;
            if (nums[mid] >= target) r = mid;
            else l = mid;
        }
        if (r < nums.size() && nums[r] == target) l_a = r;
        l = -1;
        r = nums.size();
        while (l+1 < r) {
            int mid = (l+r)/2;
            if (nums[mid] > target) r = mid;
            else l = mid;
        }
        if (l >= 0 && nums[l] == target) r_a = l;
        return {l_a,r_a};
    }
};

标签: hot100, Medium, 二分查找

添加新评论