python 实现区间合并算法

区间合并,是指将若干个有交集的区间合并为 1 个区间。

def merge_intervals(intervals):
    # 排序
    intervals = sorted(intervals, key=lambda x: x[0])
    merged = []
    for interval in intervals:
        # 如果当前区间和上一个区间有重叠,合并两个区间
        if merged and interval[0] <= merged[-1][1]:
            merged[-1][1] = max(merged[-1][1], interval[1])
        # 如果当前区间和上一个区间没有重叠,将当前区间加入结果列表
        else:
            merged.append(interval)
    return merged

intervals = [[1, 3], [2, 6], [8, 10], [15, 18]]
merged_intervals = merge_intervals(intervals)
print(merged_intervals)
#输出[[1, 6], [8, 10], [15, 18]]

流程如下:

  1. 首先将输入的区间列表按照区间起点从小到大排序。
  2. 遍历排序后的区间列表,对于每个区间,如果它和上一个区间有重叠,那么将两个区间合并;如果它和上一个区间没有重叠,那么将当前区间加入结果列表。
  3. 最后返回合并后的区间列表。
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
区间合并算法可以使用以下方法来实现: 1. 首先,将给定的区间列表按照区间的左端点进行升序排序。这样可以确保相邻的区间在排序后会是连续的。 2. 创建一个新的列表,用于存放合并后的区间。 3. 将排序后的第一个区间加入到新列表中。 4. 遍历排序后的每一个区间,依次与新列表中最后一个区间进行比较。 5. 如果当前区间的左端点大于新列表中最后一个区间的右端点,说明两个区间不重叠,直接将当前区间加入到新列表中。 6. 如果当前区间的左端点小于等于新列表中最后一个区间的右端点,说明两个区间重叠,更新新列表中最后一个区间的右端点为两个区间右端点的较大值。 7. 遍历完所有的区间后,新列表中的区间即为合并后的结果。 以下是使用Python实现的代码: ```python def merge(intervals): intervals.sort(key=lambda x: x <= merged[-1][1]: # 当前区间与新列表中最后一个区间重叠 merged[-1][1 = max(merged[-1][1], interval<span class="em">1</span><span class="em">2</span> #### 引用[.reference_title] - *1* *2* [python 合并区间](https://blog.csdn.net/python_tian/article/details/122197311)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值