[一起来刷leetcode吧][27]--No.57 Insert Interval

这篇文章是程序自动发表的,详情可以见 这里
href="http://ounix1xcw.bkt.clouddn.com/github.markdown.css" rel="stylesheet">

这是leetcode的第57题--Insert Interval

  题目

Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessary).

You may assume that the intervals were initially sorted according to their start times.

Example 1: Given intervals [1,3],[6,9], insert and merge [2,5] in as [1,5],[6,9].

Example 2: Given [1,2],[3,5],[6,7],[8,10],[12,16], insert and merge [4,9] in as [1,2],[3,10],[12,16].

This is because the new interval [4,9] overlaps with [3,5],[6,7],[8,10].

  思路 理清思路,显然只有4种情况,即newintreval的startend分别在原来的区间(cross)、 不在原来区间(即在两区间之间),当然,新区间中可能含有若干原来的区间。分类后,为了使原来的第一个和最后一个,与其他区间有同等“地位”,即可以使用同样的代码,我将intervals首尾插入了两个很大的区间。   

show me the code

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

class Solution(object):
    def insert(self, intervals, newInterval):
        """
        :type intervals: List[Interval]
        :type newInterval: Interval
        :rtype: List[Interval]
        """
        MAX=100000000
        first=Interval()
        first.start=first.end=-MAX
        last=Interval
        last.start=last.end=MAX
        intervals.insert(0,first)
        intervals.append(last)
        l = len(intervals)
        for i in  range(l):
            if intervals[i].start>newInterval.start :
                j = i
                isCross = False
                while intervals[j].start<=newInterval.end:
                    if intervals[j].end<newInterval.end:
                        del intervals[j]
                    else:
                        isCross = True
                        break
                if isCross:
                    intervals[j].start=newInterval.start
                else:intervals.insert(j,newInterval)
                break
            else :
                if intervals[i].end >= newInterval.start:
                    if intervals[i].end >= newInterval.end:break
                    j = i 1
                    isCross = False
                    while intervals[j].start<=newInterval.end:
                        if intervals[j].end<newInterval.end :
                            del intervals[j]
                        else:
                            isCross = True
                            break
                    if isCross:
                        intervals[j].start=intervals[i].start
                        del intervals[i]
                    else:intervals[i].end = newInterval.end
                    break
        del intervals[0]
        del intervals[-1]
        return intervals
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值