解题思路:
这道题的意思是找到数组里面一个数的起始位置和末尾位置,比如:
[1,5,5,7,7,8] 8的起始末尾位置为[5,5]
如果没有这个目标数,就返回[-1,-1]
还是折半查找做,先看能不能找到这个数,能找到就设置两个指针start,end从这个数开始分别向两边外拓;如果过没有找到返回[-1,-1]
提交代码:
class Solution {
public int[] searchRange(int[] nums, int target) {
int pos[]= {-1,-1};
if(nums==null||nums.length==0) return pos;
int mid,left=0,right=nums.length-1;
int start,end;
while(left<=right) {
mid=(left+right)/2;
if(nums[mid]<target) left=mid+1;
else if(nums[mid]>target) right=mid-1;
else {
start=mid;end=mid;
while(start>=0&&nums[start]==target)
start--;
while(end<nums.length&&nums[end]==target)
end++;
pos[0]=start+1;pos[1]=end-1;
return pos;
}
}
return pos;
}
}
运行结果:

本文介绍了一种使用二分查找算法确定目标数在有序数组中起始和结束位置的方法。通过一次查找定位目标数,再向两边扩展确定边界,有效解决了查找问题。适用于面试和技术竞赛。
295

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



