import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param weights int整型一维数组
* @param target int整型
* @return int整型一维数组
*/
public int binarySearch(int[] weights, int target, boolean lower) {
int left = 0, right = weights.length - 1, ans = weights.length;
while (left <= right) {
int mid = (left + right) / 2;
if (weights[mid] < target || (lower && weights[mid] <= target)) {
right = mid - 1;
ans = mid;
} else {
left = mid + 1;
}
}
return ans;
}
public int[] searchRange(int[] weights, int target) {
int leftIdx = binarySearch(weights, target, true);
int rightIdx = binarySearch(weights, target, false) - 1;
if (leftIdx <= rightIdx && rightIdx < weights.length &&
weights[leftIdx] == target && weights[rightIdx] == target) {
return new int[] {leftIdx, rightIdx};
}
return new int[] {-1, -1};
}
}
编程语言是JAVA。
该题考察的知识点是二分查找和数组操作。
代码的文字解释如下:
- 实现
binarySearch方法,用于在递增有序数组中查找目标元素的位置。 binarySearch方法的输入参数为一个整型数组weights、目标元素target和一个布尔值lower,用于指定是否查找第一个小于等于目标元素的位置。- 在
binarySearch方法中,使用左右两个指针left和right分别表示数组的左右边界。 - 使用一个变量
ans来记录最终的结果,初始值为数组的长度。假设目标元素不存在于数组中,则结果返回数组的长度。 - 使用
while循环,当左指针小于等于右指针时进行迭代。 - 在循环体内,利用二分查找的思想,计算中间位置
mid。 - 如果
weights[mid]小于目标元素target或者lower为真且weights[mid]小于等于目标元素target,则更新右指针right为mid - 1,并更新结果ans为mid。 - 否则,更新左指针
left为mid + 1。 - 返回结果
ans。 - 实现一个名为
searchRange的方法,用于在给定递增有序数组中查找目标元素的左右边界。 searchRange方法的输入参数为一个整型数组weights和目标元素target。- 调用
binarySearch方法两次,分别查找目标元素的左边界和右边界。 - 根据返回的结果判断是否找到目标元素的左右边界,并将结果存储在一个新的整型数组中返回。
- 若未找到目标元素,则返回一个包含两个元素都为 -1 的整型数组。

京公网安备 11010502036488号