目录
一:题目
二:算法原理分析
三:代码实现
一:题目
题目链接: 34. 在排序数组中查找元素的第一个和最后一个位置 - 力扣(LeetCode)
二:算法原理分析
三:代码实现
class Solution {
public:
vector<int> searchRange(vector<int>& nums, int target)
{
if(nums.size() == 0)
return {-1,-1};
vector<int> ret;
int left = 0,right = nums.size()-1;
int begin = left,end = right;
//查找左端点
while(left < right)
{
int mid = left +(right - left)/2;
if(nums[mid] >= target)
right = mid;
else
left = mid+1;
}
if(nums[left] == target)
begin = left;
else
return {-1,-1};
//此时left已经是target的左端点,可以让left不变
left = 0,right = nums.size()-1;
while(left < right)
{
int mid = left +(right- left+1) /2;
if(nums[mid] > target)
right = mid-1;
else
left = mid;
}
//左端点存在的话,右端点一定存在
end = right;
return {begin,end};
}
};