package main.www.yeluo;
import java.util.Arrays;
class Solution {
public static int[] searchRange(int[] nums,int target){
int len =nums.length;
if(len == 0){
return new int[]{-1,-1};
}
int firstPosition = findFirstPosition(nums,target);
if(firstPosition == -1){
return new int[]{-1,-1};
}
int lastPosition = findLastPosition(nums,target);
return new int[] {firstPosition,lastPosition};
}
private static int findLastPosition(int[] nums, int target) {
int left = 0;
int right = nums.length -1;
while (left < right){
int mid = (left + right + 1) >>> 1;
if(nums[mid] < target){
//下一轮搜索的区间是【mid+1,right】
left = mid + 1;
}else if(nums[mid] == target){
//下一轮搜索的区间是【mid, right】
left = mid;
}else {
//nums【mid】>target
// 下一轮搜索区间为【left,mid-1】
right = mid -1;
}
}
return right;
}
private static int findFirstPosition(int[] nums, int target) {
int left = 0;
int right = nums.length -1;
while (left < right){
int mid = (left + right ) >>> 1;
if(nums[mid] < target){
//下一轮搜索的区间是【mid+1,right】
left = mid + 1;
}else if(nums[mid] == target){
//下一轮搜索的区间是【left , mid】
right = mid;
}else {
//nums【mid】>target
// 下一轮搜索区间为【left,mid-1】
right = mid -1;
}
}
if(nums[left] == target){
return left;
}
return -1;
}
public static void main(String[] args) {
int []nums={1,2,3,4,5,5,7,8};
int []s=searchRange(nums,5);
System.out.println(Arrays.toString(s));
}
}
java实现二分查找
最新推荐文章于 2023-12-25 22:38:53 发布