首页 > 试题广场 >

合并区间

[编程题]合并区间
  • 热度指数:4470 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 128M,其他语言256M
  • 算法知识视频讲解
用x,y表示一个整数范围区间,现在输入一组这样的范围区间(用空格隔开),请输出这些区间的合并。

输入描述:
一行整数,多个区间用空格隔开。区间的逗号是英文字符。


输出描述:
合并后的区间,用过空格隔开,行末无空格
示例1

输入

1,3 2,5

输出

1,5
示例2

输入

1,3 2,5 8,10 11,15

输出

1,5 8,10 11,15

备注:
x,y均为正整数,并且x<=y。

python3解法

leetcode上一道原题的变形, 解法如下:

def merge(intervals):
    """
    合并区间算法。
    :param intervals: 传入的区间数组。例如[[1, 3], [2, 5]]
    :return: 合并后的区间。例如[[1, 5]]
    """
    out = []
    for i in sorted(intervals, key=lambda i: i[0]):  # 对区间进行排序
        if out and i[0] <= out[-1][1]:  # 当前区间起始位置小于out最后一个元素的结束位置,这时就要进行合并
            out[-1][1] = max(out[-1][1], i[1])  # 合并区间。区间的结束位置 = max(当前遍历区间的结束位置,out最后一个区间的结束位置)
        else:
            out.append(i)  # 不需要合并时的处理。
    return out


# 将输入的字符串转换成区间形式放到intervals数组中。
intervals = []
for i in input().split():  # 切成"1,3"、"2,5"这种形式
    start, end = i.split(",")
    intervals.append([int(start), int(end)])

# 调用合并区间算法
out = merge(intervals)

# 输出处理。
res = ""
for i in out:
    res = res + str(i[0]) + "," + str(i[1]) + " "
print(res.rstrip(";"))
发表于 2019-02-24 11:31:08 回复(0)