Given an array of integers nums
sorted in ascending order, find the starting and ending position of a given target
value.
Your algorithm's runtime complexity must be in the order of O(log n).
If the target is not found in the array, return [-1, -1]
.
Example 1:
Input: nums = [5,7,7,8,8,10]
, target = 8
Output: [3,4]
Example 2:
Input: nums = [5,7,7,8,8,10]
, target = 6
Output: [-1,-1]
class Solution {
public:
vector<int> searchRange(vector<int>& nums, int target) {
// 折半查找 找到时注意 向左向右分别继续查找
if(nums.empty()) return {-1,-1};
int low=0, high=nums.size()-1;
while(low <= high){
int mid = (low+high)/2;
if(target < nums[mid])
high = mid-1;
else if(target > nums[mid])
low = mid + 1;
else{
low=mid;
high=mid;
// 利用nums[low-1]而非nums[low]是一种试探性的方法。。如果不符合条件不用设为原来的值 注意对low-1值进行限制
while(low-1 >= 0 && nums[low-1] == target) low--;
while(high+1 <= nums.size()-1 && nums[high+1] == target) high++;
return {low, high};
}
}
return {-1,-1};
}
};