题解 | #找出特定体重的牛群# java
找出特定体重的牛群
https://www.nowcoder.com/practice/bbc4c61a5bb64f329663b300a634ae6a
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param weights int整型一维数组
* @param target int整型
* @return int整型一维数组
*/
public int[] searchRange (int[] weights, int target) {
// write code here
int[] ans = new int[2];
int l = 0, r = weights.length - 1;
while (l < r) {
int mid = l + (r - l) / 2;
if (weights[mid] <= target) {
r = mid;
} else {
l = mid + 1;
}
}
if (weights.length == 0 || weights[l] != target) {
return new int[] {-1, -1};
}
ans[0] = l;
l = 0;
r = weights.length - 1;
while (l < r) {
int mid = l + (r - l + 1) / 2;
if (weights[mid] >= target) {
l = mid;
} else {
r = mid - 1;
}
}
ans[1] = l;
return ans;
}
}
编程语言是Java。
该题考察的知识点是二分查找。
代码的文字解释如下:
- 定义一个整型数组ans,用于存储结果。长度为2,分别表示目标值在weights中的起始和结束位置。
- 初始化左指针l为0,右指针r为weights数组的长度-1。
- 在循环中执行二分查找,直到左指针l等于右指针r:计算中间位置mid = l + (r - l) / 2。如果weights[mid]小于等于目标值target,则更新右指针r为mid。否则,更新左指针l为mid + 1。
- 如果weights数组为空或者最终的左指针对应的元素不等于目标值target,则返回[-1, -1]表示未找到目标值。
- 将ans[0]赋值为左指针l,即目标值在weights中的起始位置。
- 重新初始化左指针l为0,右指针r为weights数组的长度-1。
- 在循环中执行二分查找,直到左指针l等于右指针r:计算中间位置mid = l + (r - l + 1) / 2。如果weights[mid]大于等于目标值target,则更新左指针l为mid。否则,更新右指针r为mid - 1。
- 将ans[1]赋值为左指针l,即目标值在weights中的结束位置。
- 返回结果数组ans。

