给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。

你的算法时间复杂度必须是 O(log n) 级别。

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

示例 1:

输入: nums = [5,7,7,8,8,10], target = 8
输出: [3,4]

代码实现


class Solution {public: int left_index(vector<int>& nums,int target) { int begin = 0; int end = nums.size() - 1; while(begin <= end) { int mid = (begin + end) / 2; if(nums[mid] == target) { if(mid == 0 || nums[mid - 1] < target) { return mid; } end = mid - 1; } else if(target < nums[mid]) { end = mid - 1; } else if(target > nums[mid]) { begin = mid + 1; } } return -1; } int right_index(vector<int>& nums,int target) { int begin = 0; int end = nums.size() - 1; while(begin <= end) { int mid = (begin + end) / 2; if(nums[mid] == target) { if(mid == nums.size() - 1 || nums[mid + 1] > target) { return mid; } begin = mid + 1; } else if(target < nums[mid]) { end = mid - 1; } else if(target > nums[mid]) { begin = mid + 1; } } return -1; } vector<int> searchRange(vector<int>& nums, int target) { vector<int> result; result.push_back(left_index(nums,target)); result.push_back(right_index(nums,target)); return result; }};