57. Insert Interval
- 题目描述
- 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].
解题思路
线性遍历一遍数组,找出一个最大的覆盖区间- 代码如下
public class Solution {
public List<Interval> insert(List<Interval> intervals, Interval newInterval) {
int len = intervals.size();
int left = 0;
int right = len - 1;
while (left < len && newInterval.start > intervals.get(left).end) {
left++;
}
while (right >= 0 && newInterval.end < intervals.get(right).start) {
right--;
}
if(left == len){
intervals.add(len,newInterval);
}else if(right == -1){
intervals.add(0,newInterval);
}else if(left <= right){
newInterval.start = newInterval.start<intervals.get(left).start?newInterval.start:intervals.get(left).start;
newInterval.end = newInterval.end>intervals.get(right).end?newInterval.end:intervals.get(right).end;
for(int i=left;i<=right;i++){
intervals.remove(left);
}
intervals.add(left,newInterval);
}else{
intervals.add(left,newInterval);
}
return intervals;
}
}