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:
Input: intervals = [[1,3],[6,9]], newInterval = [2,5]
Output: [[1,5],[6,9]]
Example 2:
Input: intervals = [[1,2],[3,5],[6,7],[8,10],[12,16]], newInterval = [4,8]
Output: [[1,2],[3,10],[12,16]]
Explanation: Because the new interval [4,8]overlaps with [3,5],[6,7],[8,10]解法:按照题意遍历一遍intervals,能合并就合并,因为intervals里的各个interval是按升序的顺序排列的,所以只要newInterval被插入了,剩下的interval直接插入就行了,具体的就看代码吧
/**
* Definition for an interval.
* function Interval(start, end) {
* this.start = start;
* this.end = end;
* }
*/
/**
* @param {Interval[]} intervals
* @param {Interval} newInterval
* @return {Interval[]}
*/
var insert = function(intervals, newInterval) {
let ans = []
let len = intervals.length
if(!len) {
ans.push(newInterval)
return ans
}
let flag = false
for(let i = 0; i < len ; i ++) {
if(flag) {
ans.push(intervals[i])
continue
}
if(newInterval.start >= intervals[i].start && newInterval.start <= intervals[i].end) {
if(newInterval.end <= intervals[i].end) {
newInterval.end =intervals[i].end
}
newInterval.start = intervals[i].start
}else if(newInterval.end >= intervals[i].start && newInterval.end <= intervals[i].end) {
newInterval.end = intervals[i].end
}else if(intervals[i].start >= newInterval.start && intervals[i].end <= newInterval.end){
continue
}else if(newInterval.end < intervals[i].start) {
ans.push(newInterval)
ans.push(intervals[i])
flag = true
}else {
ans.push(intervals[i])
}
}
if(!flag) {
ans.push(newInterval)
}
return ans
};
Success
Runtime: 84 ms, faster than 45.45% of JavaScript online submissions for Insert Interval.
Memory Usage: 37 MB, less than 100.00% of JavaScript online submissions for Insert Interval.