Leetcode Insert Intervals

本文介绍了一种在已排序的非重叠区间中插入新区间并进行必要合并的算法实现。通过两种方法,一种返回新的合并后的区间列表,另一种在原地修改输入区间列表。这两种方法都详细展示了如何处理新区间与已有区间之间的各种相交情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Ex.2: Insert Intervals

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.
在这里插入图片描述

version 1:

def insert(intervals, newInterval):
    merged = []
    for i in intervals:
        if newInterval is None or i[1] < newInterval[0]:
            merged += i,
        elif i[0] > newInterval[1]:
            merged += newInterval,
            merged += i,
            newInterval = None
        else:
            newInterval[0] = min(newInterval[0], i[0])
            newInterval[1] = max(newInterval[1], i[1])
    if newInterval is not None:
        merged += newInterval,
    return merged

intervals = [[1,2],[3,4],[6,7],[7,8]]
newInterval = [8,9]
insert(intervals, newInterval)

in place:

def insert(intervals, newInterval):
    for i in range(len(intervals)):
        # 根据左区间找到对应插入位置
        if intervals[i][0] > newInterval[0]:
            # 判断新区间与左侧区间的关系
            # 相离
            if intervals[i-1][1] < newInterval[0]:
                intervals.insert(i, newInterval)
                i = i + 1
            # 相交
            else:
                # 相交不包含
                if intervals[i-1][1] < newInterval[1]:
                    intervals[i-1][1] = newInterval[1]
                # 包含不需要任何操作
            
            # 判断新区间与插入位置右侧区间的情况
            # 相交则完成合并
            if intervals[i][0] <= newInterval[1]:
                intervals[i-1][1] = intervals[i][1]
                intervals.remove(intervals[i])
            # 插入操作完成后,推出循环
            break
            
            # 如果插入的位置在最右侧
        if i == len(intervals) - 1:
            # 判断最后一个区间与新区间的关系
            # 相离
            if intervals[i][1] < newInterval[0]:
                intervals.append(newInterval)
            else:
                intervals[i][1] = newInterval[1]
                    
    return intervals
        
                
intervals = [[1,2],[3,4],[6,7],[7,8]]
newInterval = [8,9]
insert(intervals, newInterval)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值