在排序数组中查找元素的第一个和最后一个位置(中等)
2020年12月1日
题目来源:力扣
解题
使用二分法找到目标值所在索引,两个while循环分别往前往后推出第一个不是目标值的索引
class Solution {
public int[] searchRange(int[] nums, int target) {
if(nums.length==0) return new int[]{-1,-1};
int left=0;
int right=nums.length-1;
int start=-1,fin=-1;
while(left<=right){
int center=left+(right-left)/2;
if(nums[center]<target)
left=center+1;
else if(nums[center]>target)
right=center-1;
else{
start=fin=center;
break;
}
}
if(start==-1) return new int[]{-1,-1};
while(start-1>=0 && nums[start-1]==target) start--;
while(fin+1<nums.length && nums[fin+1]==target) fin++;
return new int[]{start,fin};
}
}