34. 在排序数组中查找元素的第一个和最后一个位置
题目链接
二分查找
- 先二分查找,找到后更新第一个和最后一个的位置,继续二分,找头尾
class Solution {
int min = 100000 + 5, max = -1;
public int[] searchRange(int[] nums, int target) {
boolean flag = binarySearch(nums, target, 0, nums.length-1);
if(flag) return new int[]{min, max};
return new int[]{-1, -1};
}
private boolean binarySearch(int[] nums, int target, int left, int right){
if(left > right) return false;
boolean flag = false;
int mid = left + (right - left) / 2;
if(nums[mid] == target){
flag = true;
min = Math.min(min, mid);
max = Math.max(max, mid);
}
if(nums[mid] <= target && binarySearch(nums, target, mid+1, right))
flag = true;
if(nums[mid] >= target && binarySearch(nums, target, left, mid-1))
flag = true;
return flag;
}
}