LeetCode-034-在排序数组中查找元素的第一个和最后一个位置
思路
分别使用二分法找出上下界即可
参考:https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array/solution/yi-wen-dai-ni-gao-ding-er-fen-cha-zhao-j-ymwl/
代码
class Solution {
public int[] searchRange(int[] nums, int target) {
if(nums==null||nums.length==0) return new int[]{-1,-1};
int last=findLast(nums,target);
int first=findFirst(nums,target);
//不存在情况
if (first > last) {
return new int[]{-1,-1};
}
return new int[]{first,last};
}
public int findFirst(int[] nums,int target){
int left=0,right=nums.length-1;
while(left<=right){
int mid=left+(right-left)/2;
if(nums[mid]==target) right=mid-1;
else if(nums[mid]<target) left=mid+1;
else if(nums[mid]>target) right=mid-1;
}
return left;
}
public int findLast(int[] nums,int target){
int left=0,right=nums.length-1;
while(left<=right){
int mid=left+(right-left)/2;
if(nums[mid]==target) left=mid+1;
else if(nums[mid]<target) left=mid+1;
else if(nums[mid]>target) right=mid-1;
}
return right;
}
}