二分法:
class Solution {
public:
vector<int> searchRange(vector<int>& nums, int target) {
vector<int> res;
int left=0,right=nums.size()-1;
int mid=(left+right)/2;
int flag=0;
while(left<=right)
{
if(nums[mid]==target)
{
flag=1;
break;
}
else
{
if(nums[mid]<target)
{
left=mid+1;
mid=(left+right)/2;
}
else
{
right=mid-1;
mid=(left+right)/2;
}
}
}
if(flag==0)
{
res.push_back(-1);
res.push_back(-1);
}
else
{
int begin=mid,end=mid;
while(nums[begin]==target)
{
begin--;
if(begin<0)
break;
}
while(nums[end]==target)
{
end++;
if(end>nums.size()-1)
break;
}
res.push_back(begin+1);
res.push_back(end-1);
}
return res;
}
};摘自别人的解法:
class Solution {
public:
vector<int> searchRange(vector<int>& nums, int target) {
vector<int> res;
int left=0,right=nums.size()-1;
int mid=(left+right)/2;
int flag=0;
while(left<=right)
{
if(nums[mid]==target)
{
flag=1;
break;
}
else
{
if(nums[mid]<target)
{
left=mid+1;
mid=(left+right)/2;
}
else
{
right=mid-1;
mid=(left+right)/2;
}
}
}
if(flag==0)
{
res.push_back(-1);
res.push_back(-1);
}
else
{
int begin=mid,end=mid;
while(nums[begin]==target)
{
begin--;
if(begin<0)
break;
}
while(nums[end]==target)
{
end++;
if(end>nums.size()-1)
break;
}
res.push_back(begin+1);
res.push_back(end-1);
}
return res;
}
};
本文介绍了一种使用二分法查找指定目标值在有序数组中首次和末次出现位置的算法实现。通过定义一个Solution类,该类包含一个名为searchRange的成员函数,此函数接收一个整数向量nums及目标值target作为输入参数,返回目标值在nums中的起始位置和结束位置。
4876

被折叠的 条评论
为什么被折叠?



