---
description: '# Medium'
---

# 57. Insert Interval

{% hint style="info" %}
想尽所有的可能性太复杂了，简化思想，将这个区间分成三部分，第一部分在newInterval之前，没有任何重叠，加入到res里，第二部分不断更新newInterval的起始位置，加入到res里，第三部分把剩余的加入到res里

Key idea: how to update newInterval?

view each small interval and update newInterval\[1] with max(interval\[cur]\[1], newInterval\[1])

我觉得最难的是想出来更新区间时的while的限制条件
{% endhint %}

```python
class Solution:
    def insert(self, intervals: List[List[int]], newInterval: List[int]) -> List[List[int]]:
        res = []
        cur = 0
        n = len(intervals)
        # add all non-overlap intervals into res
        while cur < n and intervals[cur][1] < newInterval[0]:
            res.append(intervals[cur][:])
            cur += 1
            
        # find the new interval
        while cur < n and newInterval[1] >= intervals[cur][0]:
            newInterval[0] = min(intervals[cur][0], newInterval[0])
            newInterval[1] = max(intervals[cur][1], newInterval[1])
            cur += 1
        res.append(newInterval[:])
            
        while cur < n:
            res.append(intervals[cur][:])
            cur += 1
            
        return res
```

