Problem: 34. 在排序数组中查找元素的第一个和最后一个位置
思路
找到大于等于target的下标,然后遍历之后的数组,找到最后的下标。
class Solution {
public:
int f(vector<int>& nums, int target){
int l=0,r=nums.size()-1;
int mid=floor(l+(r-l)*1.0/2);
while(l<=r){//这里需要小于等于
if(nums[mid]<target)l=mid+1;
else r=mid-1;
mid=floor(l+(r-l)*1.0/2);
}
return l;
}
vector<int> searchRange(vector<int>& nums, int target) {
int ans=f(nums,target),n=nums.size(),res=ans;//res是最后的下标,当只有一个时,res=ans
if(ans>=n || nums[ans]!=target)return {-1,-1};
for(int i=ans+1;i<nums.size();i++){
if(nums[i]==target)res=i;
else break;
}
nums.clear();
nums.push_back(ans);
nums.push_back(res);
return nums;
}
};
标签:下标,target,nums,int,res,34,力扣,查找,ans
From: https://blog.51cto.com/u_15974747/9562009