题目
直接跳转到:hot100重复题目
法1:二分查找,最佳解法!!!
class Solution:
def searchRange(self, nums: List[int], target: int) -> List[int]:
start = self.find(nums, target)
end = self.find(nums, target + 1) - 1
return [start, end] if start <= end else [-1, -1]
def find(self, nums, target):
l, r = 0, len(nums)-1
while l <= r:
mid = (l + r) // 2
if nums[mid] < target:
l = mid + 1
else:
r = mid - 1
return l
class Solution {
public int[] searchRange(int[] nums, int target) {
if (nums.length == 0) {
return new int[]{-1, -1};
}
int n = nums.length;
int left = findLeftBoundary(nums, target, 0, n - 1);
int right = findRightBoundary(nums, target, 0, n - 1);
if (left <= right) {
return new int[]{left, right};
}
return new int[]{-1, -1};
}
public int findLeftBoundary(int[] nums, int target, int start, int end) {
while (start <= end) {
int mid = start + (end - start) / 2;
if (nums[mid] >= target) {
end = mid - 1;
} else {
start = mid + 1;
}
}
return start;
}
public int findRightBoundary(int[] nums, int target, int start, int end) {
while (start <= end) {
int mid = start + (end - start) / 2;
if (nums[mid] <= target) {
start = mid + 1;
} else {
end = mid - 1;
}
}
return end;
}
}
本文详细介绍了如何使用Java编写一个名为Solution的类,实现二分查找算法,包括findLeftBoundary和findRightBoundary方法,以找到目标值在给定数组中的左右边界。

被折叠的 条评论
为什么被折叠?



