leetcode 34. 在排序数组中查找元素的第一个和最后一个位置 medium
题目描述:
给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。
你的算法时间复杂度必须是 O(log n) 级别。
如果数组中不存在目标值,返回 [-1, -1]。
解题思路:
//找开始和结束。
//所以找第一个>=target的下标和最后一个<=target的下标,分别套用2个模板
代码:
class Solution {
public:
vector<int> searchRange(vector<int>& nums, int target) {
//找开始和结束。
//所以找第一个>=target的下标和最后一个<=target的下标,分别套用2个模板
if(nums.empty()){
return {-1,-1};
}
int left=0,right=nums.size()-1;
while(left<right){
int mid=left+(right-left)/2;
if(nums[mid]>=target)
right=mid;
else
left=mid+1;
}
if(nums[left] !=target) // 可能不存在这个数
return {-1, -1};
int start=left;
left=0,right=nums.size()-1;
while(left<right){
int mid=(long long)left+right+1>>1;
if(nums[mid]<=target)
left=mid;
else
right=mid-1;
}
return {start,left};
}
};