36.leetCode 57:Insert Interval(插入区间)
2018-01-20 07:07
387 查看
【题目】:
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
as
Example 2:
Given
as
This is because the new interval
【思路】:
1. 和上一题的思路一样,先把新区间插入到列表中,使得列表仍为有序的。再遍历列表,逐一进行区间的合并
2.遍历一次列表,若列表中的当前元素与新区间没有重叠则直接插入到结果集中,否则要先与新区间进行合并,直到没有重叠为止
【Python代码】:
1.排序、合并
class Solution:
def insert(self, intervals, newInterval):
"""
:type intervals: List[Interval]
:type newInterval: Interval
:rtype: List[Interval]
"""
if not intervals:
return [newInterval]
merged = []
if len(intervals) == 1:
if newInterval.start >= intervals[0].start:
intervals.append(newInterval)
else:
intervals.insert(0, newInterval)
elif newInterval.start >= intervals[-1].start:
intervals.append(newInterval)
elif newInterval.start <= intervals[0].start:
intervals.insert(0, newInterval)
else:
for i in range(len(intervals) - 1):
if newInterval.start >= intervals[i].start and newInterval.start <= intervals[i + 1].start:
intervals.insert(i + 1, newInterval)
break
for interval in intervals:
if not merged or merged[-1].end < interval.start:
merged.append(interval)
else:
merged[-1].end = max(merged[-1].end, interval.end)
return merged
2.遍历、合并
class Solution:
def insert(self, intervals, newInterval):
"""
:type intervals: List[Interval]
:type newInterval: Interval
:rtype: List[Interval]
"""
if not intervals:
return [newInterval]
merged = []
for interval in intervals:
if newInterval is None or interval.end < newInterval.start:
merged.append(interval)
if len(intervals) == 1:
merged.append(newInterval)
elif interval.start > newInterval.end:
merged.append(newInterval)
merged.append(interval)
newInterval = None
else:
newInterval.start = min(interval.start,newInterval.start)
newInterval.end = max(interval.end,newInterval.end)
if newInterval and newInterval not in merged:
merged.append(newInterval)
return merged
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].
【思路】:
1. 和上一题的思路一样,先把新区间插入到列表中,使得列表仍为有序的。再遍历列表,逐一进行区间的合并
2.遍历一次列表,若列表中的当前元素与新区间没有重叠则直接插入到结果集中,否则要先与新区间进行合并,直到没有重叠为止
【Python代码】:
1.排序、合并
class Solution:
def insert(self, intervals, newInterval):
"""
:type intervals: List[Interval]
:type newInterval: Interval
:rtype: List[Interval]
"""
if not intervals:
return [newInterval]
merged = []
if len(intervals) == 1:
if newInterval.start >= intervals[0].start:
intervals.append(newInterval)
else:
intervals.insert(0, newInterval)
elif newInterval.start >= intervals[-1].start:
intervals.append(newInterval)
elif newInterval.start <= intervals[0].start:
intervals.insert(0, newInterval)
else:
for i in range(len(intervals) - 1):
if newInterval.start >= intervals[i].start and newInterval.start <= intervals[i + 1].start:
intervals.insert(i + 1, newInterval)
break
for interval in intervals:
if not merged or merged[-1].end < interval.start:
merged.append(interval)
else:
merged[-1].end = max(merged[-1].end, interval.end)
return merged
2.遍历、合并
class Solution:
def insert(self, intervals, newInterval):
"""
:type intervals: List[Interval]
:type newInterval: Interval
:rtype: List[Interval]
"""
if not intervals:
return [newInterval]
merged = []
for interval in intervals:
if newInterval is None or interval.end < newInterval.start:
merged.append(interval)
if len(intervals) == 1:
merged.append(newInterval)
elif interval.start > newInterval.end:
merged.append(newInterval)
merged.append(interval)
newInterval = None
else:
newInterval.start = min(interval.start,newInterval.start)
newInterval.end = max(interval.end,newInterval.end)
if newInterval and newInterval not in merged:
merged.append(newInterval)
return merged
相关文章推荐
- Leet Code 57 Insert Interval - 插入区间 - Java
- Insert Interval区间插入题型求解 C实现
- Insert Interval 插入区间
- 【LeetCode-面试算法经典-Java实现】【057-Insert Interval(插入区间)】
- [LeetCode] Insert Interval 插入区间
- Insert Interval 插入区间@LeetCode
- Insert Interval 插入区间
- 【LeetCode-面试算法经典-Java实现】【057-Insert Interval(插入区间)】
- LeetCode OJ 之 Insert Interval (插入区间)
- Insert Interval(区间插入)
- leetcode Insert Interval 区间插入
- 插入区间Insert Interval
- [LeetCode] Insert Interval 插入区间
- Insert Interval 插入区间到多个区间
- [Leetcode] insert interval 插入区间
- lintcode 容易题:Insert Interval 插入区间
- LeetCode | Insert Interval(插入区间)
- insert-interval 插入区间
- [Leetcode 57, Hard] Insert Interval
- [leetcode-57]Insert Interval(java)