目录
题目链接:34. 在排序数组中查找元素的第一个和最后一个位置
题目链接:34. 在排序数组中查找元素的第一个和最后一个位置
题目描述:
题目分析:
先运用二分找到元素的位置,若没找到返回{-1,-1},找到后再判断这个元素存在 1 个还是 2 个,若为 2 个,再判断刚刚所找到的元素是在左边的元素还是在右边的元素即可。
题解代码:
class Solution {
public:
vector<int> searchRange(vector<int>& nums, int target) {
int left = 0;
int right = nums.size()-1;
int index=-1;
while(left<=right) //其中之一种二分法
{
int mid = left+(right-left)/2;
if(nums[mid]==target)
{
index=mid;
break;
}
else if(nums[mid]>target)
right=mid-1;
else
left=mid+1;
}
if(index==-1) //没找到指定元素
return {-1,-1};
else //找到了就进行一系列判断
{
int leftindex=index;
int rightindex=index;
for(int i=rightindex;i<=nums.size()-1 && nums[i]==target;i++) //位置在右边的就从左往右
{
rightindex=i;
}
for(int i=leftindex;i>=0 && nums[i]==target;i--) //步骤与上面相反
{
leftindex=i;
}
return {leftindex,rightindex};
}
}
};