LeetCode57-插入区间

题目:

给出一个无重叠的 ,按照区间起始端点排序的区间列表。

在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。

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

思路:

这一题可以说是也是很简单了,只要你把上一题合并区间给做了,那么做这一题简直不要太简单。

程小新同学:LeetCode56-合并区间​zhuanlan.zhihu.com

不清楚的读者也可以看看我写的上一篇文章,先熟悉熟悉。

如果上一题已经做出来的同学,我就直接说思路了。核心就是:只要将newInterval链表中的元素加入到intervals中,即可又表示成第56题合并区间了。大家可以好好想想,是不是这么回事,是不是觉得so easy?所以我觉得有些题目就是在炒现饭。

代码如下:

class Solution(object):
    # 本题可以借鉴第55题的方法,只要将newInterval链表中的元素加入到intervals中,即可又表示成第55题了
    def insert(self, intervals, newInterval):
        """
        :type intervals: List[Interval]
        :type newInterval: Interval
        :rtype: List[Interval]
        """
        intervals_list = []
        # 将newInterval链表中的元素加入到intervals中
        intervals.append(newInterval)
        if len(intervals) == 0:
            return intervals_list
        # 首先将intervals链表数组中链表的值转换成数组里的值,方便后续操作
        for index in intervals:
            interval = [index.start, index.end]
            intervals_list.append(interval)
        # 将intervals_to_list数组按照对应intervals中每一个链表对应的start值的大小重新排列,方便后续合并区间
        intervals_list.sort()
        if len(intervals_list) == 0:
            return []
        start, end = intervals_list[0]
        final_list = []
        # 这一步就是主要的合并区间过程了
        for index in intervals_list:
            if start <= index[0] <= end:
                start = min(start, index[0])
                end = max(end, index[1])
            else:
                final_list.append([start, end])
                start, end = index
        final_list.append([start, end])
        final_intervals = []
        # 得到合并之后的数组之后,还得将其转换成链表格式表示
        for indice in final_list:
            interval = Interval()
            interval.start = indice[0]
            interval.end = indice[1]
            final_intervals.append(interval)
        return final_intervals


if __name__ == "__main__":
    intervals = []
    intervals_list = [[1, 3], [6, 9]]
    for index in intervals_list:
        interval = Interval()
        interval.start = index[0]
        interval.end = index[1]
        intervals.append(interval)
    new_interval_list = [2, 5]
    newInterval = Interval()
    newInterval.start, newInterval.end = new_interval_list
    final_list = Solution().insert(intervals, newInterval)
    print(final_list)

执行效率属于中等吧,在50%左右。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

学习的学习者

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

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

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

打赏作者

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

抵扣说明:

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

余额充值