57. Insert Interval

2335 단어
이 문제는 제가 지금까지 leetcode에서 가장 긴 제목을 썼을 것입니다. 저는 제 코드보다 훨씬 간결하다고 믿습니다. 제 생각은 start와end의 두 위치를 찾은 다음에 start 앞에 꽂고 end 뒤에 꽂고 중간에 덮어쓰는 것입니다. 코드는 다음과 같습니다.
# Definition for an interval.
# 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]
        """
        
        if len(intervals) == 0:
            return [newInterval]
        intervals.sort(key = lambda x:x.start)
        i = 0
        while i < len(intervals):
            if intervals[i].start < newInterval.start:
                i += 1
            else:
                break
        if i == len(intervals) and newInterval.start > intervals[i-1].end:
            intervals.append(newInterval)
            return intervals
        else:
            if i == 0:
                s = 0
                if intervals[i].start > newInterval.start:
                    st = newInterval.start
            else:
                s = i - 1
                i = i - 1
            while i < len(intervals):
                if intervals[i].end < newInterval.end:
                    i += 1
                else:
                    break
            e = i
        res = []
        for inter in intervals[:s]:
            res.append(inter)
        if intervals[s].end < newInterval.start:
            res.append(intervals[s])
            st = newInterval.start
        else:
            st = min(intervals[s].start, newInterval.start)
        if e >= len(intervals):
            en = newInterval.end
            res.append(Interval(st,en))
        elif newInterval.end < intervals[e].start:
            en = newInterval.end
            res.append(Interval(st,en))
            res.append(intervals[e])
        else:
            en = max(intervals[e].end, newInterval.start)
            res.append(Interval(st,en))
        if e>= len(intervals) - 1:
            res.sort(key = lambda x:x.start)
            return res
        else:
            for inter in intervals[e+1:]:
                res.append(inter)
            res.sort(key = lambda x:x.start)
            return res

좋은 웹페이지 즐겨찾기