"""
给出一个无重叠的 ，按照区间起始端点排序的区间列表。

在列表中插入一个新的区间，你需要确保列表中的区间仍然有序且不重叠（如果有必要的话，可以合并区间）。

 

示例 1：

输入：intervals = [[1,3],[6,9]], newInterval = [2,5]
输出：[[1,5],[6,9]]
示例 2：

输入：intervals = [[1,2],[3,5],[6,7],[8,10],[12,16]], newInterval = [4,8]
输出：[[1,2],[3,10],[12,16]]
解释：这是因为新的区间 [4,8] 与 [3,5],[6,7],[8,10] 重叠。

来源：力扣（LeetCode）
链接：https://leetcode-cn.com/problems/insert-interval
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
"""

from typing import *


def insert(intervals: List[List[int]], newInterval: List[int]) -> List[List[int]]:
    start, end = 0, 0
    for start in range(len(intervals)):
        if newInterval[0] <= intervals[start][0] or intervals[start][0] <= newInterval[0] <= intervals[start][1]:
            break
    if newInterval[0] > intervals[start][1]:
        start += 1

    for j in range(start, len(intervals)):
        if intervals[j][0] > newInterval[1]:
            end = j - 1
            break
        elif intervals[j][0] <= newInterval[1] <= intervals[j][1]:
            end = j
            break
    if newInterval[1] >= intervals[-1][1]:
        end = len(intervals) - 1
    end = max(end, start)

    if start >= len(intervals):
        intervals.insert(start, newInterval)
    elif start == end and (newInterval[1] < intervals[start][0]):
        intervals.insert(start, newInterval)
    else:
        newInterval[0] = min(newInterval[0], intervals[start][0])
        newInterval[1] = max(newInterval[1], intervals[end][1])
        intervals = intervals[:start] + intervals[end + 1:]
        intervals.insert(start, newInterval)
    return intervals


if __name__ == '__main__':
    print(insert([[1,3],[6,9]], [-1,15]))