题解 | #牛群的协作#java

牛群的协作

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

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param cow_ranges int整型二维数组
     * @return int整型
     */
    public int minParallelAttacks (int[][] cow_ranges) {
        // write code here
// 首先按照牛的右边界从小到大对牛的范围进行排序
        Arrays.sort(cow_ranges, (a, b) -> Integer.compare(a[1], b[1]));

        int count = 0; // 特殊攻击次数
        int prevX =
            Integer.MIN_VALUE; // 上一个特殊攻击的位置,初始化为负无穷

        for (int[] cow : cow_ranges) {
            // 如果牛的范围左边界大于上一个特殊攻击的位置,说明需要释放新的特殊攻击
            if (cow[0] > prevX) {
                count++; // 特殊攻击次数加一
                prevX = cow[1]; // 更新上一个特殊攻击的位置为当前牛的右边界
            }
        }

        return count;
    }
}

代码使用的编程语言是Java

知识点考察:

  1. 排序算法
  2. 贪心算法:代码使用贪心策略,每次选择能覆盖最多未覆盖部分的特殊攻击位置,从而减少特殊攻击的次数。
  3. Lambda 表达式:在排序部分使用了 Lambda 表达式来自定义排序规则。
  4. 状态更新和迭代:根据不同情况更新 count 和 prevX 变量,实现状态的更新和迭代过程。

代码的解释:

  1. 传入的二维数组 cow_ranges 表示了每头牛的攻击范围,每行包含两个整数,分别表示牛的攻击范围的左边界和右边界。
  2. 代码开始使用 Arrays.sort() 方法对牛的攻击范围进行排序,排序规则是根据牛的右边界从小到大排序。
  3. count 变量用于记录特殊攻击的次数,初始化为 0。
  4. prevX 变量表示上一个特殊攻击的位置,初始化为负无穷,因为还没有进行特殊攻击。
  5. 接下来,通过循环遍历每头牛的攻击范围:如果当前牛的攻击范围的左边界大于上一个特殊攻击的位置 prevX,则意味着需要释放新的特殊攻击,因为当前牛的攻击范围与之前的特殊攻击不重叠。在这种情况下,增加 count 计数,表示进行了一次特殊攻击。更新 prevX 为当前牛的攻击范围的右边界,以便下次判断。
  6. 方法返回 count,即最少需要进行的特殊攻击次数,使所有牛的攻击范围并行。
全部评论

相关推荐

04-17 10:16
门头沟学院 Java
不河狸啊:为什么我的是已送达,连已读都没有
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务