题目链接
LeetCode-34. 在排序数组中查找元素的第一个和最后一个位置
题目描述
题解
题解一(Java)
作者:@仲景
class Solution {
public int[] searchRange(int[] nums, int target) {
return new int[]{searchLeft(nums, target), searchRight(nums, target)};
}
/**
* 二分查找target的最左边的索引
*/
public int searchLeft(int[] nums, int target) {
int left = 0, right = nums.length - 1;
while (left <= right) {
int mid = left + ((right - left) >> 1);
if (nums[mid] > target) {
right = mid - 1;
} else if (nums[mid] < target) {
left = mid + 1;
} else {
if (mid == 0 || nums[mid - 1] != target) {
return mid;
}
right = mid - 1;
}
}
return -1;
}
/**
* 二分查找target的最右边的索引
*/
public int searchRight(int[] nums, int target) {
int left = 0, right = nums.length - 1;
while (left <= right) {
int mid = left + ((right - left) >> 1);
if (nums[mid] > target) {
right = mid - 1;
} else if (nums[mid] < target) {
left = mid + 1;
} else {
if (mid == nums.length - 1 || nums[mid + 1] != target) {
return mid;
}
left = mid + 1;
}
}
return -1;
}
}