二分查找
class Solution {
public int[] searchRange(int[] nums, int target) {
int s=seach(nums,target);//二分查找,返回找到的那个等于target的下标
if (s == -1)
return new int[]{-1, -1};//如果没找到该数,直接返回-1
//再在数组中向左向右分别搜索是否还有等于target的数
int left=s;
int right=s;//初始化左右边界
while(left>0&&nums[left-1]==target){//如果左边界的左边的数等于target,边界左移
left--;
}
while(right<nums.length-1&&nums[right+1]==target){//如果右边界的右边的数等于target,边界右移
right++;
}
return new int[]{left,right};
}
public int seach(int[]nums,int target){
int low=0;
int high=nums.length-1;//初始化边界值
while(low<=high){
int mid=low+(high-low)/2;
//重新更改边界
if(target>nums[mid]){
low=mid+1;
}
else if(target<nums[mid]){
high=mid-1;
}else{
return mid;
}
}
return -1;
}
}