leetcode(python)——56合併區間,57插入區間
阿新 • • 發佈:2021-01-13
技術標籤:LeetCode刷題
題號56
考慮兩個問題:
1.怎麼判斷有沒有重疊?令前面的是p,後面的是q,觀察p的結束結點和q的開始結點即可
區間有重疊,需要合併p[end]>q[start];
區間端點重疊,需要連線p[end]=q[start];
區間無重疊,無操作,p[end]<q[start].
2.怎麼合併區間?
如果有重疊,比較兩個區間的結束結點,誰大用誰
class Solution:
def merge(self, intervals: List[List[int]]) -> List[List[int]]:
intervals. sort(key=lambda x:x[0]) #根據x的第一個元素排序,用到Python的lambda表示式
res=[] #結果集
for interval in intervals:#遍歷區間
if len(res)==0: #如果結果集此刻為空,無需比較直接加入區間
res.append(interval)
elif interval[0]>res[-1][1]: #每來一個新的區間要用它的start跟結果集中已有的區間的最後一個比較end
res. append(interval)
else:
res[-1][1] = max(res[-1][1],interval[1])
return res
補充Python的lambda表示式用法
大概就是把x+y 寫作 lambda 引數:表示式—>lambda x,y:x+y
區間的表達涉及list切片。list[0]第一列,list[-1]負向索引。參考
題號57
延續56題,56題題乾沒有宣告排序,我們給它排了序,57這道題題幹聲明瞭排序,讓我們給它保持排序。可以考慮直接把新區間加進去,此時是一個無序的,然後重新排序,就跟56的解法一毛一樣了。
class Solution:
def insert(self, intervals: List[List[int]], newInterval: List[int]) -> List[List[int]]:
intervals.append(newInterval)
res=[]
intervals.sort(key=lambda x:x[0])
for interval in intervals:
if len(res)==0:
res.append(interval)
elif interval[0]>res[-1][1]:
res.append(interval)
else:
res[-1][1] = max(interval[1],res[-1][1])
return res