本题是一个和二分查找相关的综合性问题,大致思路就是分别找到目标值在数组中的左边界和右边界,再返回区间即可。
class Solution { public: vector<int> searchRange(vector<int>& nums, int target) { int n = nums.size(); if(n == 0) { return {-1, -1}; } vector<int> res(2, 0); int l = 0; int r = n - 1; // 寻找左边界 while(l < r) { int mid = (l + r) >> 1; if(nums[mid] >= target) { r = mid; } else { l = mid + 1; } } // 若左边界找不到则说明数组中不存在目标值 if(nums[l] != target) { return {-1, -1}; } res[0] = l; l = 0; r = n - 1; // 寻找右边界 while(l < r) { int mid = (l + r + 1) >> 1; if(nums[mid] <= target) { l = mid; } else { r = mid - 1; } } res[1] = l; return res; } };