思路
二分查找,找目标值在数组中的左右端点。
代码
class Solution {
public int[] searchRange(int[] nums, int target) {
int []ret = new int[]{-1,-1};
int size = nums.length;
//寻找目标值最左端点
for(int l=0,r=size-1;l<=r;){
int mid = (l+r)>>1;
int n = nums[mid];
if(n<target) l = mid+1;
else
if(n>=target) r = mid-1;
if(n==target) ret[0] = mid;
}
//寻找目标值的最右端点
for(int l=0,r=size-1;l<=r;){
int mid = (l+r)>>1;
int n = nums[mid];
if(n>target) r = mid-1;
else
if(n<=target) l = mid+1;
if(n==target) ret[1] = mid;
}
return ret;
}
}