/*
* @lc app=leetcode.cn id=57 lang=java
*
* [57] 插入区间
*/
// @lc code=start
class Solution {
public int[][] insert(int[][] intervals, int[] newInterval) {
List<int[]> re = new ArrayList<>(intervals.length);
// 处理 newInterval 不在intervals的所有区间内
if(intervals.length == 0){
re.add(newInterval);
return re.toArray(new int[0][]);
}else if(intervals[0][0] > newInterval[1]){
// 小于所有区间
re.add(newInterval);
for(int i = 0; i < intervals.length; i++)
re.add(intervals[i]);
return re.toArray(new int[0][]);
}else if(intervals[intervals.length - 1][1] < newInterval[0]){
// 大于所有区间
for(int i = 0; i < intervals.length; i++)
re.add(intervals[i]);
re.add(newInterval);
return re.toArray(new int[0][]);
}
int type = 0;
for(int le = 0; le < intervals.length; le++){
if(type == 0 && intervals[le][0] <= newInterval[0] && intervals[le][1] >= newInterval[0]){
// newIntervals的左区间在intervals的某段区间内
re.add(intervals[le]);
// 解决这样的情况[[1,5]] \n [2,7]
// newInterval的左端在intervals的区间内,但右段不在
if(intervals[intervals.length - 1][1] < newInterval[1])
intervals[le][1] = newInterval[1];
type = 1;
continue;
}else if(type == 0 && newInterval[0] <= intervals[le][0] && newInterval[1] >= intervals[le][1]){
// 当情况为这样时 [[1,5]] \n [0,6]
// newInterval包含intervals一段区间或全部区间
re.add(newInterval);
type = 1;
continue;
}else if(intervals[le][0] <= newInterval[1] && intervals[le][1] >= newInterval[1]){
// newInterval的右端点在interval的某个区间
if(1 == type){
// newInterval的左端点在interval的某个区间
re.get(re.size() - 1)[1] = intervals[le][1];
}else{
// newInterval的左端点小于当前le所指向的区间的左端点
intervals[le][0] = newInterval[0];
re.add(intervals[le]);
}
type += 2;
continue;
}else if(intervals[le][0] > newInterval[1] && type <= 1){
if(1 == type){
// newInterval的左端点在interval的某个区间
if(re.get(re.size() - 1)[1] < newInterval[1]){
// newInterval的右端点大于对应区间的右端点
re.get(re.size() - 1)[1] = newInterval[1];
}
}else{
// newInterval 不在intervals的任何一段区间
re.add(newInterval);
}
type += 2;
}
if(type != 1)
re.add(intervals[le]);
}
return re.toArray(new int[0][]);
}
}
// @lc code=end
数组、区间合并-[57] 插入区间
最新推荐文章于 2024-09-14 00:00:07 发布