高效日程管理:利用区间合并算法优化活动安排【python LeetCode57】

发布于:2024-04-23 ⋅ 阅读:(157) ⋅ 点赞:(0)

作者介绍:10年大厂数据\经营分析经验,现任大厂数据部门负责人。
会一些的技术:数据分析、算法、SQL、大数据相关、python
欢迎加入社区:码上找工作
作者专栏每日更新:
LeetCode解锁1000题: 打怪升级之旅
python数据分析可视化:企业实战案例

题目描述

给出一个无重叠的,按照区间起始端点排序的区间列表。在列表中插入一个新的区间,你需要确保列表仍然按照区间起始端点有序且不重叠(如果有必要的话,可以合并区间)。

输入格式
  • intervals:一个二维数组,每个内部数组包含两个整数,表示一个区间的起始和结束位置。
  • newInterval:一个包含两个整数的数组,表示需要插入的新区间的起始和结束位置。
输出格式
  • 返回一个二维整数数组,表示合并后的区间。

示例

示例 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] 重叠。

方法一:直接合并

解题步骤
  1. 添加新区间:将新区间添加到区间列表中。
  2. 排序:按每个区间的起始位置进行排序。
  3. 合并区间:使用一个循环遍历排序后的区间列表,合并所有重叠的区间。
完整的规范代码
def insert(intervals, newInterval):
    """
    直接合并新区间
    :param intervals: List[List[int]], 输入的区间列表
    :param newInterval: List[int], 需要插入的新区间
    :return: List[List[int]], 合并后的区间列表
    """
    intervals.append(newInterval)
    intervals.sort(key=lambda x: x[0])

    merged = []
    for interval in intervals:
        if not merged or merged[-1][1] < interval[0]:
            merged.append(interval)
        else:
            merged[-1][1] = max(merged[-1][1], interval[1])
    return merged

# 示例调用
print(insert([[1,3],[6,9]], [2,5]))  # 输出: [[1,5],[6,9]]
print(insert([[1,2],[3,5

网站公告

今日签到

点亮在社区的每一天
去签到