思路
二分查找,找目标值在数组中的左右端点。
代码
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;
}
}
本文介绍了一种使用二分查找算法确定目标值在有序数组中出现的左右边界的方法。通过两次二分查找分别找到目标值的起始位置和结束位置,实现了高效搜索。

被折叠的 条评论
为什么被折叠?



