LeetCode 热题 100:合并区间

合并区间问题的多语言解决方案

摘要

在本文中,我们将探讨解决“合并区间”问题的多种算法和编程语言实现。这个问题要求我们找出给定区间集合中所有重叠区间,并合并它们,返回一个不重叠的区间数组。我们将分析几种不同的算法,并提供 Python、Java 和 C++ 的实现。

1. 问题描述

给定一个表示若干个区间集合的数组 intervals,其中单个区间为 intervals[i] = [starti, endi]。任务是合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。

2. 输入和输出格式
  • 输入:二维整数数组 intervals,其中每个子数组包含两个整数 [starti, endi]
  • 输出:二维整数数组,合并后的不重叠区间数组。
3. 示例
  • 示例 1:intervals = [[1,3],[2,6],[8,10],[15,18]] 输出:[[1,6],[8,10],[15,18]]
  • 示例 2:intervals = [[1,4],[4,5]] 输出:[[1,5]]
4. 约束条件
  • 1 <= intervals.length <= 10^4
  • intervals[i].length == 2
  • 0 <= starti <= endi <= 10^4
5. 算法分析
  • 排序 + 贪心:首先根据区间的起始位置对区间进行排序。然后遍历排序后的区间,使用贪心算法合并重叠的区间。
6. 多语言实现

我们将使用 Python、Java 和 C++ 来实现排序 + 贪心算法。

Python 实现
def merge(intervals):
    if not intervals:
        return []
    
    # 根据区间的起始位置进行排序
    intervals.sort(key=lambda x: x[0])
    merged = [intervals[0]]
    
    for current in intervals:
        # 如果当前区间可以合并到已存在的区间中,则合并
        if current[0] <= merged[-1][1]:
            merged[-1][1] = max(merged[-1][1], current[1])
        else:
            merged.append(current)
    
    return merged

# 示例
print(merge([[1,3],[2,6],[8,10],[15,
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大大怪打LZR

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值