目录
题目
给你一个按照非递减顺序排列的整数数组 nums
,和一个目标值 target
。请你找出给定目标值在数组中的开始位置和结束位置。
如果数组中不存在目标值 target
,返回 [-1, -1]
。
你必须设计并实现时间复杂度为 O(log n)
的算法解决此问题。
代码
class Solution {
int[] searchRange(int[] nums, int target) {
int low=0;
int high=nums.length-1;
while(low<=high){
int mid=(low+high)>>>1;
if(nums[mid]==target){//如果锁定中间元素,让他从两边一点一点往中间逼近
while(nums[low]!=target){
low++;
}while (nums[high]!=target){high--;}
return new int[] {low,high};//找到
}
else if(nums[mid]<target){
low =mid+1;
}else{high=mid-1;}
}
return new int[] {-1,-1};//没找到
}
}