Find First and Last Position of Element in Sorted Array

在升序数组中找到 target 的范围

要求O(\log n)

自然想到二分查找

  1. 查找下限
    nums[mid]<target left=mid;
    else right=mid;
  2. 查找上限
    nums[mid]>target right = mid
    else left = mid
class Solution
{
public:
    vector<int> searchRange(vector<int>& nums, int target)
    {
        vector<int> res(2, -1);
        int size = nums.size();
        if (size == 0) return res;
        int left = 0, right = size - 1;
        while (right > left)
        {
            int mid = (left + right) / 2;
            if (nums[mid] < target)
                left = mid + 1;
            else
                right = mid;
        }
        if (nums[left] == target)
            res[0] = left;
        else
            return res;
        left = 0;
        right = size - 1;
        while (left < right)
        {
            int mid = (left + right + 1) / 2;
            if (nums[mid] > target)
                right = mid - 1;
            else
                left = mid;
        }
        res[1] = right;
        return res;
    }
};

✔ Accepted
✔ 88/88 cases passed (8 ms)
✔ Your runtime beats 92.89 % of cpp submissions
✔ Your memory usage beats 76.77 % of cpp submissions (10.3 MB)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容