把这个newInterval加入到list中,然后调用56. 合并区间的代码。。。
class Solution {
public List<Interval> insert(List<Interval> intervals, Interval newInterval) {
intervals.add(newInterval);
return merge(intervals);
}
public List<Interval> merge(List<Interval> intervals) {
if (intervals.size() <= 1) {
return intervals;
}
intervals.sort((e1, e2) -> {
if (e1.start == e2.start) {
return Integer.compare(e1.end, e2.end);
}
return Integer.compare(e1.start, e2.start);
});
List<Interval> ans = new ArrayList<>();
for (int i = 0; i < intervals.size(); i++) {
Interval cur = intervals.get(i);
while (i + 1 < intervals.size()) {
Interval next = intervals.get(i + 1);
if (cur.end >= next.start) {
cur.end = Math.max(cur.end, next.end);
i++;
} else {
break;
}
}
ans.add(cur);
}
return ans;
}
}
不过,既然人家题都出了,且说给出的就是一个无重叠、已经排好序的List,让你只插一个就好。那我们是不是可以只针对这一个插入的处理呢?
当然可以了,首先可以先找到newInterval.start应该待的位置,然后再判断newInterval.end的位置,将中间的全部吃掉即可。
懒。。就不写代码了
幸好没要求你做原地操作。。这样的话难度就大大增加了。。