思路: 二分查找法,找到target的某个位置,向两边扩散找到边界即可。 ```c++ class Solution { public: vector<int> searchRange(vector<int>& nums, int target) { int targetIndex = findTarget(nums, target); if (targetIndex == -1) { return {-1, -1}; } int first = targetIndex; while (first >= 0) { if (nums[first] == target) { first -= 1; } else { break; } } int last = targetIndex; while (last < nums.size()) { if (nums[last] == target) { last += 1; } else { break; } } return {first + 1, last - 1}; } int findTarget(vector<int>& nums, int target) { int first = 0, last = nums.size(); while (first != last) { const int mid = (first + last) / 2; if (nums[mid] == target) { return mid; } if (nums[first] <= nums[mid]) { if (nums[first] <= target && target < nums[mid]) { last = mid; } else { first = mid + 1; } } else { if (nums[mid] < target && target <= nums[last - 1]) { first = mid + 1; } else { last = mid; } } } return -1; } }; ```
Activity
[-]e[/-][+]LeetCode: 34. 搜索范围[/+]