您的位置:首页 > 其它

【LeetCode】Insert Interval

2014-05-11 14:41 337 查看
Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessary).

You may assume that the intervals were initially sorted according to their start times.

Example 1:
Given intervals
[1,3],[6,9]
, insert and merge
[2,5]
in as
[1,5],[6,9]
.

Example 2:
Given
[1,2],[3,5],[6,7],[8,10],[12,16]
, insert and merge
[4,9]
in as
[1,2],[3,10],[12,16]
.

This is because the new interval
[4,9]
overlaps with
[3,5],[6,7],[8,10]
.

此题主要考虑到各种边界条件

可以用一些小的例子累得出循环的条件,注意将删除节点后应将i--

public class Solution {
public ArrayList<Interval> insert(ArrayList<Interval> intervals,
Interval newInterval) {
if (intervals.isEmpty()) {
intervals.add(newInterval);
return intervals;
}

Interval pre = newInterval;
for(int i=0;i<intervals.size();i++){
int start = pre.start;
int end = pre.end;
Interval temp = intervals.get(i);

if (temp.start > end) {
intervals.add(i, pre);
return intervals;
} else if (temp.start == end) {
temp.start = start;
return intervals;
} else {
if (start <= temp.start && end <= temp.end) {
temp.start = start;
return intervals;
} else if (start <= temp.start && end > temp.end) {
intervals.remove(temp);
i--;
continue;
} else if (start > temp.start && end < temp.end) {
return intervals;
} else if (start > temp.start &&start<temp.end&& end >=temp.end) {
pre.start = temp.start;
pre.end = end;
intervals.remove(temp);
i--;
continue;
} else if (start > temp.end) {
pre.start = start;
pre.end = end;
continue;
} else if (start == temp.end) {
pre.start = temp.start;
pre.end = end;
intervals.remove(temp);
i--;
continue;
}
}
}
intervals.add(pre);
return intervals;

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: