原题:(频率3)
Given an array of integers 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]
.
For example,
Given [5, 7, 7, 8, 8, 10]
and target value 8,
return [3, 4]
.
题意:给一个升序数组,找到某target的开始和结束位置
代码和思路:
class Solution {
public int[] searchRange(int[] nums, int target) {
int l=0,len=nums.length,r=len-1,mid=0;
int[] res = new int[2];
while(l<=r){
//>>1比 /2要快
mid = (l+r)>>1;
if(nums[mid]==target) break;
else if(nums[mid] > target){
r = mid - 1;
}
else l = mid + 1;
}
//上面的代码找到target后,还要进行重复数字的位置判断
if(l<=r){
//下面操作完后,l在target开始左边一位,r在结束右边一位
l = mid - 1;
while(l>=0 && nums[l]==nums[mid]) l--;
r = mid + 1;
while(r<len && nums[r] == nums[mid]) r++;
res[0]=l+1;
res[1]=r-1;
}else{
res[0]=-1;
res[1]=-1;
}
return res;
}
}