题目:
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]
题意: 就是找到第一个target出现的地方和最后一个target出现的地方,如果没出现用-1表示。
解析: 用lower_bound(大于等于) upper_bound(大于) 分别找出来,然后进行判断。
具体见代码:
class Solution {
public:
vector<int> searchRange(vector<int>& nums, int target)
{
vector<int>ans;
if(nums.size()==0)
{
ans.push_back(-1);
ans.push_back(-1);
return ans;
}
int first_index,second_index;
first_index = lower_bound(nums.begin(),nums.end(),target)-nums.begin();
if(first_index==nums.size()||nums[first_index]!=target)
{
ans.push_back(-1);
ans.push_back(-1);
return ans;
}
else
{
ans.push_back(first_index);
second_index = upper_bound(nums.begin(),nums.end(),target)-nums.begin();
if(nums[second_index-1]!=target) ans.push_back(-1);
else ans.push_back(second_index-1);
}
return ans;
}
};