import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param intervals int整型二维数组
     * @param new_interval int整型一维数组
     * @return int整型二维数组
     */
    public int[][] insertNewInterval (int[][] intervals, int[] new_interval) {
        // 将数组转化成集合,然后放入初始化集合list
        List<int[]> list = new ArrayList<>(Arrays.asList(intervals));
        // 添加新区间到集合
        list.add(new_interval);
        // 集合排序(利用Comparator的功能函数,以第一个数字为升序)
        list.sort(Comparator.comparingInt(o -> o[0]));
        // 创建返回结果的集合
        List<int[]> res = new ArrayList<>();
        // 初始化
        int left = list.get(0)[0], right = list.get(0)[1];
        for (int i = 1; i < list.size(); i++) {
            // 如果前一个的尾巴大于等于当前数的开头,意味着可以合并,比如{1,3}和{2,6}
            if (right >= list.get(i)[0]) {
                // 从两个数组的尾巴中选择较大的那个来合并
                right = Math.max(right, list.get(i)[1]);
            } else {
                // 如果小于,那么不能合并,单独加入集合
                res.add(new int[] {left, right});
                // 重新初始化为当前数组
                left = list.get(i)[0];
                right = list.get(i)[1];
            }
        }
        // 因为最后一次可能没有添加
        res.add(new int[] {left, right});
        // 集合转数组
        int[][] ans = new int[res.size()][2];
        for (int i = 0; i < res.size(); i++) {
            ans[i] = res.get(i);
        }
        return ans;
    }
}

本题知识点分析:

1.贪心算法(局部推导整体)

2.集合的自定义排序

3.集合转数组

4.数学模拟

本题解题思路分析:

1.本题和奶牛喂养时间是基本一致,唯一区别就是新加一个区间,但数组扩容比较麻烦,因此放入集合里比较好做

2.集合排序(利用Comparator的功能函数,以第一个数字为升序)

3.如果前一个的尾巴大于等于当前数的开头,意味着可以合并,比如{1,3}和{2,6},从两个数组的尾巴中选择较大的那个来合并

4.如果小于,那么不能合并,单独加入集合,重新初始化为当前数组

5.集合转数组返回即可

本题使用编程语言: Java