import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param cow_ranges int整型二维数组
     * @return int整型
     */
    public int minParallelAttacks (int[][] cow_ranges) {
        int n = cow_ranges.length;
        Arrays.sort(cow_ranges, Comparator.comparingInt(o -> o[0]));
        int count = 0;
        int left = 0, right = 0;
        while (left < n) {
            int end = cow_ranges[left][1];
            // 如果right<n并且直到第某个区间的第一个数字大于end,例如{2,7},end=7,要直到right=2,{8,15},8>7不满足条件才退出循环
            while (right < n && cow_ranges[right][0] <= end) {
                // end总是取较小的一个,第一次取7,第二次肯定是15
                end = Math.min(end, cow_ranges[right][1]);
                right++;

            }
            // 重新初始化操作,第二个需要射击的区间开始搜索
            left = right;
            // 射击数量++
            count++;
        }
        return count;
    }
}

本题知识点分析:

1.贪心算法

2.集合自定义排序

3.数学模拟

4.API函数

本题解题思路分析:

1.自定义排序利用功能函数直接排序,指定以第一个数字为升序

2.如果right<n并且直到第某个区间的第一个数字大于end,例如{2,7},end=7,要直到right=2,{8,15},8>7不满足条件才退出循环

3. end总是取较小的一个,第一次取7,第二次肯定是15

4.重新初始化操作,第二个需要射击的区间开始搜索 射击数量++

5.返回射击次数即可

本题使用编程语言: Java