34. 在排序数组中查找元素的第一个和最后一个位置 - 力扣(LeetCode)
思路:
使用两次二分查找,第一次找大于等于target的第一个位置,第二次找大于等于target + 1的第一个位置-1。
总结:
二分条件可以灵活地转换。
代码:
java
class Solution {
public int[] searchRange(int[] nums, int target) {
int n = nums.length;;
int left = binary_search(nums, target);
if(left == n || nums[left] != target) return new int[]{-1, -1};
int right = binary_search(nums, target + 1);
return new int[]{left, right - 1};
}
// >=
private int binary_search(int[] nums, int target) {
int n = nums.length;
int l = 0, r = n - 1;
while(l <= r) {
int mid = l + (r - l) / 2;
if(nums[mid] < target) {
l = mid + 1;
}
else {
r = mid - 1;
}
}
return l;
}
}