leetcode57 插入區間

2021-09-11 02:22:54 字數 2770 閱讀 8074

給出乙個無重疊的 ,按照區間起始端點排序的區間列表。

在列表中插入乙個新的區間,你需要確保列表中的區間仍然有序且不重疊(如果有必要的話,可以合併區間)。

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

找到第乙個interval.end>=new.start的位置,在該位置插入new,從該位置開始向後合併:

# definition for an interval.

# class interval:

# def __init__(self, s=0, e=0):

# self.start = s

# self.end = e

class

solution

:def

insert

(self, intervals, newinterval)

:"""

:type intervals: list[interval]

:type newinterval: interval

:rtype: list[interval]

"""# 找到第乙個interval.end>=new.start的位置

loc =

0for i, interval in

enumerate

(intervals)

:if newinterval.start <= interval.end:

break

loc +=

1 intervals.insert(loc, newinterval)

while loc <

len(intervals)-1

:if intervals[loc]

.end >= intervals[loc+1]

.start:

intervals[loc]

.start =

min(intervals[loc]

.start, intervals[loc+1]

.start)

intervals[loc]

.end =

max(intervals[loc]

.end, intervals[loc+1]

.end)

intervals.remove(intervals[loc+1]

)else

:break

return intervals

二分找loc:
# definition for an interval.

# class interval:

# def __init__(self, s=0, e=0):

# self.start = s

# self.end = e

class

solution

:def

insert

(self, intervals, newinterval)

:"""

:type intervals: list[interval]

:type newinterval: interval

:rtype: list[interval]

"""# 找到第乙個interval.end>=new.start的位置

loc = self.bi_search(intervals, newinterval)

intervals.insert(loc, newinterval)

while loc <

len(intervals)-1

:if intervals[loc]

.end >= intervals[loc+1]

.start:

intervals[loc]

.start =

min(intervals[loc]

.start, intervals[loc+1]

.start)

intervals[loc]

.end =

max(intervals[loc]

.end, intervals[loc+1]

.end)

intervals.remove(intervals[loc+1]

)else

:break

return intervals

defbi_search

(self,

all, one)

: left, right =0,

len(

all)

while left < right:

mid =

(left+right)//2

ifall

[mid]

.end < one.start:

left = mid+

1else

: right = mid

return left

LeetCode 57 插入區間

幾個注意點 1.原集合為空 2.插入在最開始的位置 3.插入在末尾位置 4.插入在中間 可以通過新增標誌,沒有新增就每次都去判斷重疊情況進行新增 vectorresult if intervals.size 0 bool isadd false for int i 0 i intervals.siz...

leetcode 57 插入區間

給出乙個無重疊的 按照區間起始端點排序的區間列表。在列表中插入乙個新的區間,你需要確保列表中的區間仍然有序且不重疊 如果有必要的話,可以合併區間 示例 1 輸入 intervals 1,3 6,9 newinterval 2,5 輸出 1,5 6,9 示例 2 輸入 intervals 1,2 3,...

Leetcode 57 插入區間

給出乙個無重疊的 按照區間起始端點排序的區間列表。在列表中插入乙個新的區間,你需要確保列表中的區間仍然有序且不重疊 如果有必要的話,可以合併區間 示例 1 輸入 intervals 1,3 6,9 newinterval 2,5 輸出 1,5 6,9 示例 2 輸入 intervals 1,2 3,...