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.集合转数组返回即可