Given an array of integers 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].
For example,
Given [5, 7, 7, 8, 8, 10] and target value 8,
return [3, 4].
class Solution {
public:
vector<int> searchRange(vector<int>& nums, int target) {
int min = 0, max = nums.size() - 1, mid = 0;
vector <int> res;
int start = 0, end = 0;
while(min <= max){
mid = min + (max - min)/2;
if(nums[mid] == target){
start = mid;
end = mid;
while(start > 0 && nums[start] == nums[start - 1]){
--start;
}
while(end <= nums.size() - 1 && nums[end] == nums[end+1]){
++end;
}
res.push_back(start);
res.push_back(end);
return res;
}
if(target < nums[mid]){
max = mid - 1;
}
if(target > nums[mid]){
min = mid + 1;
}
}
res.push_back(-1);
res.push_back(-1);
return res;
}
};
34. Search for a Range
最新推荐文章于 2022-01-21 16:09:17 发布