题解 | #牛群的协作#

牛群的协作

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

知识点

贪心算法

解题思路

遍历牛的范围数组。如果当前牛的范围左边界大于当前特殊攻击的位置,说明需要进行一次新的特殊攻击。此时,特殊攻击次数加一,并更新特殊攻击的位置为当前牛的范围右边界。

如果当前牛的范围右边界小于等于当前特殊攻击的位置,说明当前牛的范围已经被前面的特殊攻击覆盖,可以继续使用当前的特殊攻击来覆盖其他牛的范围。此时,更新特殊攻击的位置为当前牛的范围右边界。

最后,得到击败所有牛所需的最小特殊攻击次数,并返回。

Java题解

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, Comparator.comparingInt(a -> a[0]));
        // 初始特殊攻击次数为 0
        int count = 0;
        // 当前特殊攻击的位置
        int pos = Integer.MIN_VALUE;
        // 遍历牛的范围数组
        for (int[] range : cow_ranges) {
            // 如果当前牛的范围左边界大于当前特殊攻击的位置,说明需要进行一次新的特殊攻击
            if (range[0] > pos) {
                count++;
                pos = range[1]; // 更新特殊攻击的位置为当前牛的范围右边界
            } else {
                // 如果当前牛的范围右边界小于等于当前特殊攻击的位置,说明当前牛的范围已经被前面的特殊攻击覆盖
                // 可以继续使用当前的特殊攻击来覆盖其他牛的范围
                pos = Math.min(pos, range[1]);
            }
        }
        
        return count;
    }
}

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务