chenfei0 2020-02-26
你的算法时间复杂度必须是 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; } };