1.题目描述:
给定一个按照升序排列的整数数组nums,和一个目标值target。找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值target,返回[-1, -1]。
2.二分查找:分别查找左边界和右边界。
class Solution {
private int left = -2;
private int right = -2;
public int[] searchRange(int[] nums, int target) {
helperRight(nums, target);
helperLeft(nums, target);
if (left == -2 || right == -2) return new int[]{-1, -1};//查找值过大或者过小
if (right - left > 1) return new int[]{left + 1, right - 1};//查找到区间
return new int[]{-1, -1};//查找值不存在
}
public void helperRight(int[] nums, int target) {//查找右边界
int l = 0;
int r = nums.length - 1;
while (l <= r) {
int mid = (l + r) / 2;
if (nums[mid] > target) r = mid - 1;
else {
l = mid + 1;
right = l;
}
}
}
public void helperLeft(int[] nums, int target) {//查找左边界
int l = 0;
int r = nums.length - 1;
while (l <= r) {
int mid = (l + r) / 2;
if (nums[mid] < target) l = mid + 1;
else {
r = mid - 1;
left = r;
}
}
}
}