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.返回射击次数即可