题目链接
题目描述
给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。
如果数组中不存在目标值 target,返回 [-1, -1]。
进阶:
示例1:
输入:nums = [
5,7,7,8,8,10], target = 6 输出:[-1,-1]
提示
0 <= nums.length <= 10-10 <= nums[i] <= 10nums是一个非递减数组-
思路
二分查找
典型查找上下界问题,具体模板参考几个模板
题解
class Solution {private:int binarySearch(vector<int>& nums, int target, bool isLeft = true) {int left = 0, right = nums.size();while (left < right) {int mid = ((right - left) >> 1) + left;if ((isLeft && nums[mid] >= target) || nums[mid] > target) {right = mid;} else {left = mid + 1;}}if (isLeft) {if (left == nums.size()) return -1;return nums[left] == target ? left : -1;} else {if (left == 0) return -1;return nums[left - 1] == target ? (left - 1) : -1;}}public:vector<int> searchRange(vector<int>& nums, int target) {int leftBound = binarySearch(nums, target);int rightBound = binarySearch(nums, target, false);return vector<int>{leftBound, rightBound};}};
复杂度分析
时间复杂度:
- 空间复杂度:
