import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param intervals int整型二维数组 * @return int整型二维数组 */ public int[][] mergeAnimalRanges (int[][] intervals) { Arrays.sort(intervals, (Comparator.comparingInt(o -> o[0]))); ArrayList<int[]> arrayLists = new ArrayList<>(); for (int i = 0; i < intervals.length; i++) { int left = intervals[i][0], right = intervals[i][1]; // empty是初始化操作 后面判断集合中最后一个数组的右端点是否小于要添加的左端点,例如(0,1),(2,3), 1 < 2 那么就不执行合并! if ((arrayLists.isEmpty()) || (arrayLists.get(arrayLists.size() - 1)[1] < left)) { arrayLists.add(intervals[i]); } else { // 需要进行合并 arrayLists.get(arrayLists.size() - 1)[1] = Math.max(arrayLists.get( arrayLists.size() - 1)[1], right); } } int [][] result = new int[arrayLists.size()][2]; for (int i = 0; i < arrayLists.size(); i++) { for (int j = 0; j < 2; j++) { result[i][j] = arrayLists.get(i)[j]; } } return result; } }
本题知识点分析:
1.集合的存取
2.数学模拟
3.集合转数组
4.快速排序 自定义这边用功能函数的静态方法comparingInt,然后是Lambda表达式
本题解题思路分析:
1.本题去掉排序,依然是可以通过的,说明测试用例是有问题的,没有说区间已经排序好了。
2.empty是初始化操作 后面判断集合中最后一个数组的右端点是否小于要添加的左端点,例如(0,1),(2,3), 1 < 2 那么就不执行合并!
3.合并的话就是把取两个右端点的较大值
4.最后集合转二维数组返回即可
本题使用编程语言: Java
如果你觉得本篇文章对您有帮助的话,可以点个赞支持一下,感谢~