/**
一个二分方法找第一个
一个二分方法找第二个
第一个没找着就直接返回
*/
class Solution {
public int[] searchRange(int[] nums, int target) {
int len = nums.length;
if(len == 0) return new int[]{-1,-1};
int left = leftSearch(nums, target, 0, len-1);
if(left == -1)
return new int[]{-1,-1};
int right = rightSearch(nums, target, 0, len-1);
return new int[]{left, right};
}
public int leftSearch(int[] nums, int target, int left, int right)
{
while(left < right)
{
int mid = (right-left)/2+left;
if(nums[mid] > target)
right = mid-1;
else if(nums[mid] < target)
left = mid+1;
else
right = mid;
}
if(nums[left] == target)
return left;
else
return -1;
}
public int rightSearch(int[] nums, int target, int left, int right)
{
while(left < right)
{
int mid = (right-left+1)/2+left;
if(nums[mid] > target)
right = mid-1;
else if(nums[mid] < target)
left = mid+1;
else
left = mid;
}
return left;
}
}
34. 在排序数组中查找元素的第一个和最后一个位置
最新推荐文章于 2023-10-06 22:09:54 发布