计算机低能儿从0刷leetcode | 34.在排序数组中查找元素的第一个和最后一个位置 | 二分法
题目:34. 在排序数组中查找元素的第一个和最后一个位置
思路:这道题感觉比33题要简单很多,思路也很顺畅,主要分为两部分。
1、寻找左端点。我们还是使用二分查找,依然是比mid小去左侧,比mid大去右侧。区别是当target == nums[mid]的时候,如果mid-1存在,我们判断nums[mid-1]是否也等于target,如果是就向左查找,因为左端点一定在左侧,否则向右查找。
2、从确定好的左端点位置向右遍历数组,直到找到右端点。
代码:
class Solution {
public:vector<int> searchRange(vector<int>& nums, int target) {int len = nums.size();int l=0,r=len-1;int left=-1,right=-1;if(len==0) return {-1,-1};//左端点while(l<=r){int mid = (l+r)/2;if(target<nums[mid]) r=mid-1;else if(target>nums[mid]) l=mid+1;else if(target==nums[mid]){if(mid>0&&nums[mid-1]==nums[mid])r=mid-1;else {left=mid;break;}}}//右端点right=left;while(right<len-1&&nums[right+1]==target)right++;vector<int> res={left,right};return res;}
};