在排序数组中查找元素的第一个和最后一个位置
class Solution {
public int[] searchRange(int[] nums, int target) {
int leftId = binarySearch(nums, target, true);
int rightId = binarySearch(nums, target, false) - 1;
if (leftId <= rightId && rightId < nums.length && nums[leftId] == target && nums[rightId] == target) {
return new int[]{leftId, rightId};
}
return new int[]{-1, -1};
}
public int binarySearch(int[] nums, int target, boolean lower) {
int len = nums.length;
int left = 0, right = nums.length - 1, ans = nums.length;
while (left <= right) {
int mid = (left + right) / 2;
//进行二分
//或者是一串相等的数时,right往前进,此时是在找leftId
if (nums[mid] > target || lower && nums[mid] >= target) {
right = mid - 1;
ans = mid;
}
else {
left = mid + 1;
}
}
return ans;
}
}