题目
代码
class Solution {
public:
vector<int> searchRange(vector<int>& nums, int target) {
int begin=0,end=nums.size()-1;
int mid;
bool findTarget=false;
while(begin<=end)
{
mid=(begin+end)/2;
if(nums[mid]==target)
{
findTarget=true;
break;
}
else if(nums[mid]<target)
begin=mid+1;
else
end=mid-1;
}
std::cout<<mid;
vector<int> result;
if(findTarget)
{
for(int i=mid;i>=0;i--)
if(i==0)
{
result.push_back(0);
break;
}
else if(nums[i]!=nums[i-1])
{
result.push_back(i);
break;
}
for(int i=mid;i<nums.size();i++)
{
if(i==nums.size()-1)
{
result.push_back(i);
break;
}else if(nums[i]!=nums[i+1])
{
result.push_back(i);
break;
}
}
}
else{
result.push_back(-1);
result.push_back(-1);
}
return result;
}
};
思路
现用二分法找到其中一个目标值,然后再往左右寻找端点,比如 455556,目标值5,端点就是第一个5和最后一个5,返回即可