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

京公网安备 11010502036488号