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

如果你觉得本篇文章对您有帮助的话,可以点个赞支持一下,感谢~