class Solution {
public int[] searchRange(int[] nums, int target) {
int left = searchLeft(nums,target);
int right = searchRight(nums,target);
return new int[]{left,right};
}
/**
* 左值二分模板
*/
public int searchLeft (int[] nums, int target) {
int left = 0;
int right = nums.length - 1;
while (left <= right) {
// 防止溢出
int middle = (right - left) / 2 + left;
if (nums[middle] >= target) {
// 继续往左边找
right = middle - 1;
}else {
// 继续往右边找
left = middle + 1;
}
}
// 考虑目标值不在数组中的两种情况
if (left == nums.length || nums[left] != target) left = -1;
return left;
}
/**
* 右值二分模板
*/
public int searchRight (int[] nums, int target) {
int left = 0;
int right = nums.length - 1;
while (left <= right) {
// 防止溢出
int middle = (right - left) / 2 + left;
if (nums[middle] <= target) {
// 继续往右边找
left = middle + 1;
}else {
// 继续往左边找
right = middle - 1;
}
}
// 考虑目标值不在数组中的两种情况
if (right == -1 || nums[right] != target) right = -1;
return right;
}
}
作者:naruto-gyb
链接:https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array/solution/zuo-zhi-by-naruto-gyb-l152/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
leetcode 34. 在排序数组中查找元素的第一个和最后一个位置
最新推荐文章于 2022-08-02 17:24:12 发布