题目描述:
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]
必须以O(log n)的时间复杂度,而且是有序数组,所以考虑采用二分搜索。一旦找到目标元素后,分别向两边搜索,找到该元素的第一个和最后一个位置。
class Solution {
public:
vector<int> searchRange(vector<int>& nums, int target) {
int begin=0;
int end=nums.size()-1;
int mid=(begin+end)/2;
while(begin<=end)
{
if(nums[mid]==target)
{
int i=mid;
int j=mid;
while(nums[i-1]==target&&i>0) i--;
while(nums[j+1]==target&&j<(nums.size()-1)) j++;
vector<int> result;
result.push_back(i);
result.push_back(j);
return result;
}
else if(target>nums[mid])
{
begin=mid+1;
mid=(begin+end)/2;
}
else if(target<nums[mid])
{
end=mid-1;
mid=(begin+end)/2;
}
}
return vector<int>(2,-1);
}
};