题解 | #找出特定体重的牛群# java

找出特定体重的牛群

https://www.nowcoder.com/practice/bbc4c61a5bb64f329663b300a634ae6a

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。

该题考察的知识点是二分查找和数组操作。

代码的文字解释如下:

  1. 实现 binarySearch 方法,用于在递增有序数组中查找目标元素的位置。
  2. binarySearch 方法的输入参数为一个整型数组 weights、目标元素 target 和一个布尔值 lower,用于指定是否查找第一个小于等于目标元素的位置。
  3. 在 binarySearch 方法中,使用左右两个指针 left 和 right 分别表示数组的左右边界。
  4. 使用一个变量 ans 来记录最终的结果,初始值为数组的长度。假设目标元素不存在于数组中,则结果返回数组的长度。
  5. 使用 while 循环,当左指针小于等于右指针时进行迭代。
  6. 在循环体内,利用二分查找的思想,计算中间位置 mid
  7. 如果 weights[mid] 小于目标元素 target 或者 lower 为真且 weights[mid] 小于等于目标元素 target,则更新右指针 right 为 mid - 1,并更新结果 ans 为 mid
  8. 否则,更新左指针 left 为 mid + 1
  9. 返回结果 ans
  10. 实现一个名为 searchRange 的方法,用于在给定递增有序数组中查找目标元素的左右边界。
  11. searchRange 方法的输入参数为一个整型数组 weights 和目标元素 target
  12. 调用 binarySearch 方法两次,分别查找目标元素的左边界和右边界。
  13. 根据返回的结果判断是否找到目标元素的左右边界,并将结果存储在一个新的整型数组中返回。
  14. 若未找到目标元素,则返回一个包含两个元素都为 -1 的整型数组。
全部评论

相关推荐

昨天 16:52
已编辑
门头沟学院 Java
周五投的,流程今天结束
投递地平线等公司8个岗位
点赞 评论 收藏
分享
炫哥_:哥们项目描述里面vector和mysql之类的都要写吗,直接开头技术栈巴拉巴拉就行了,完全不是技术点啊
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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