Given an array of integers nums
sorted in ascending order, find the starting and ending position of a given target
value.
Your algorithm's runtime complexity must be in the order of O(log n).
If the target is not found in the array, return [-1, -1]
.
Example 1:
Input: nums = [5,7,7,8,8,10]
, target = 8
Output: [3,4]
Example 2:
Input: nums = [5,7,7,8,8,10]
, target = 6
Output: [-1,-1]
这个题我的思路是,二分查找出目标值的任意一个位置。然后用两个指针(s,e)移动,直到移动到边界位置!
class Solution {
public int[] searchRange(int[] nums, int target) {
int l=0;
int h=nums.length-1;
int answer[]=new int[2];
int s=-1;
int e=-1;
int t=-1;
while(l<=h){
int m=(l+h)/2;
if(nums[m]>target)
h=m-1;
else if(nums[m]<target)
l=m+1;
else{
t=m;
break;
}
}
if(t==-1){
answer[0]=-1;
answer[1]=-1;
}else{
s=t;
e=t;
while(s>=0&&nums[s]==target){
s--;
}
while(e<=nums.length-1&&nums[e]==target){
e++;
}
s=s+1;
e=e-1;
answer[0]=s;
answer[1]=e;
}
return answer;
}
}