题解 | #找出特定体重的牛群# 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。

该题考察的知识点是二分查找。

代码的文字解释如下:

  1. 定义一个整型数组ans,用于存储结果。长度为2,分别表示目标值在weights中的起始和结束位置。
  2. 初始化左指针l为0,右指针r为weights数组的长度-1。
  3. 在循环中执行二分查找,直到左指针l等于右指针r:计算中间位置mid = l + (r - l) / 2。如果weights[mid]小于等于目标值target,则更新右指针r为mid。否则,更新左指针l为mid + 1。
  4. 如果weights数组为空或者最终的左指针对应的元素不等于目标值target,则返回[-1, -1]表示未找到目标值。
  5. 将ans[0]赋值为左指针l,即目标值在weights中的起始位置。
  6. 重新初始化左指针l为0,右指针r为weights数组的长度-1。
  7. 在循环中执行二分查找,直到左指针l等于右指针r:计算中间位置mid = l + (r - l + 1) / 2。如果weights[mid]大于等于目标值target,则更新左指针l为mid。否则,更新右指针r为mid - 1。
  8. 将ans[1]赋值为左指针l,即目标值在weights中的结束位置。
  9. 返回结果数组ans。
全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务