public class Solution {
public int[] searchRange(int[] nums, int target) {
int begin=0;
int end=nums.length-1;
int a=(begin+end)/2;
int[] answer=new int[2];
while (nums[a]!=target) {
if(begin==end){
answer[0]=-1;
answer[1]=-1;
return answer;
}
if (nums[a]>target) {
if (a==end) {
end--;
}else {
end=a;
}
}else {
if (a==begin) {
begin++;
}else {
begin=a;
}
}
a=(begin+end)/2;
}
int bb=0;
int be=a;
int ba=(bb+be)/2;
while (!(nums[ba]==target&&(ba==0||nums[ba-1]!=target))) {
if (nums[ba]>=target) {
if (ba==be) {
be--;
}else {
be=ba;
}
}else {
if (ba==bb) {
bb++;
}else {
bb=ba;
}
}
ba=(bb+be)/2;
}
int eb=a;
int ee=nums.length-1;
int ea=(eb+ee)/2;
while (!(nums[ea]==target&&(ea==nums.length-1||nums[ea+1]!=target))) {
if (nums[ea]<=target) {
if (ea==eb) {
eb++;
}else {
eb=ea;
}
}else {
if (ea==ee) {
ee--;
}else {
ee=ea;
}
}
ea=(eb+ee)/2;
}
answer[0]=ba;
answer[1]=ea;
return answer;
}
}Algorithms—34.Search for a Range
最新推荐文章于 2022-03-03 19:12:48 发布
本文介绍了一个用于搜索有序数组中特定目标值出现范围的算法实现。该算法通过两次二分查找确定目标值的起始和结束位置,适用于重复元素场景。若未找到目标值,则返回[-1, -1]。
534

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



