插入区间
给出一个无重叠的 ,按照区间起始端点排序的区间列表。
在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。
示例 1:
输入: intervals = [[1,3],[6,9]], newInterval = [2,5]
输出: [[1,5],[6,9]]
思路+代码+注释:
public List<Interval> insert(List<Interval> intervals, Interval newInterval) {
/*
思路:遍历区间集合,如果区间的end小于新区间的start那么将区间加入到res;如果区间的end大于等于新区间的start并且区间的start小于等于新区间的end那么将
进行合并两个区间的较小start是newStart,较大end是newEnd;如果区间的end大于等于新区间的start但是区间的start大于新区间的end,那么将新区间加入到res中,
最后将从当前区间到最后区间之间的区间加入到res中
*/
List<Interval> res=new ArrayList<>();
int j=0;
int newStart=newInterval.start;
int newEnd=newInterval.end;
for (int i = 0; i < intervals.size(); i++) {
Interval interval=intervals.get(i);
if (interval.end<newStart)
{
res.add(interval);
}else {
if (interval.start<=newEnd)
{
if (interval.start<newStart)
{
newStart=interval.start;
}
if (interval.end>newEnd)
{
newEnd=interval.end;
}
}else {
break;
}
}
//j用来记录和要添加的区间不能合并的第一个区间的索引
j=i+1;
}
res.add(new Interval(newStart,newEnd));
for (int i = j; i < intervals.size(); i++) {
res.add(intervals.get(i));
}
return res;
}