57. &56 Insert Interval

题目要求:
  • 题目要求
  • 寻找插入位置,也是最简单的情况:根据newIntervals.start和intervals[i].end比较,如果新插入的开始大于一个元素的末尾,那么插入位置肯定不是这个元素。
  • 确定最后的位置:如果newIntervals.end < intervals[i].start就要不停的遍历,所以相反的条件就是while条件newIntervals.end >= intervals[i].start,就可以执行while语句。-
  • 题解步骤
# Time:  O(n)
# Space: O(1)


class Interval(object):
    def __init__(self, s=0, t=0):
        self.start = s
        self.end = t

    def __repr__(self):
        return "[{}, {}]".format(self.start, self.end)


class Solution(object):
    def insert(self, intervals, newInterval):
        """
        :param intervals: List[Interval]
        :param nreinterval: Interval
        :return: List[Interval]
        """
        result = []
        i = 0
        while i < len(intervals) and newInterval.start > intervals[i].end:  #找到需要插入更新的位置
            result.append(intervals[i])
            i += 1
        while i < len(intervals) and newInterval.end >= intervals[i].start:   #从上面的位置开始
            newInterval = Interval(min(newInterval.start, intervals[i].start), \
                                   max(newInterval.end, intervals[i].end))
            i += 1
        result.append(newInterval)
        for interval in range(i, len(intervals)):
            result.append(intervals[interval])
        return result

if __name__ == "__main__":
    print(Solution().insert([Interval(1, 2), Interval(3, 5), Interval(6, 7), Interval(8, 10), Interval(12, 16)], Interval(4, 9)))


©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,768评论 0 33
  • 目录 1. 栈和队列1.用两个队列实现栈2.用两个栈实现队列3.实现一个栈,可以用常数级时间找出栈中的最小值4.判...
    MigrationUK阅读 3,055评论 4 20
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,742评论 18 399
  • 《早春飞雪》 云淡风清昨日间, 飞雪狂舞今夜寒。 此雪嫌却春色晚, 化作柳絮飞满天。 《春雪》 大雪随风飘九霄, ...
    路寻写作创富阅读 416评论 0 3
  • layout: posttitle: Angular@1.4.3 中文 API 服务篇 $timeout & $i...
    binyu1231阅读 5,016评论 0 2