输入:intervals = [[1,3],[2,6],[8,10],[15,18]]
输出:[[1,6],[8,10],[15,18]]
解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].
题解:
按照题意整就好了,值得注意的是 intervals 要按照第一列进行排序。8个排序方法中,先用冒泡进行尝试,果然超时,换成希尔排序后:
class Solution:
def merge(self, intervals: List[List[int]]) -> List[List[int]]:
l = len(intervals)
re = []
i =0
def shell_sort(slist):
gap = len(slist)
while gap > 1:
gap = gap // 2
for i in range(gap, len(slist)):
for j in range(i % gap, i, gap):
if slist[i][0] < slist[j][0]:
slist[i][0], slist[j][0] = slist[j][0], slist[i][0]
slist[i][1], slist[j][1] = slist[j][1], slist[i][1]
return slist
intervals = shell_sort(intervals)
#print("intervals",intervals)
t1,t2 = intervals[0][0],intervals[0][1]
for i in range(1,len(intervals)):
print(t1,t2,intervals[i][0],intervals[i][1])
if t1<=intervals[i][0]<=t2:
t2 = max(t2,intervals[i][1])
else:
re.append([t1,t2])
t1,t2 = intervals[i][0],intervals[i][1]
re.append([t1,t2])
#print(re)
return re
虽然过了,但是这个时间复杂度就有点大了
看了看官方,在排序的时候换成 intervals.sort(key=lambda x: x[0]),调用内置函数。
class Solution:
def merge(self, intervals: List[List[int]]) -> List[List[int]]:
l = len(intervals)
re = []
i =0
intervals.sort(key=lambda x: x[0])
#print("intervals",intervals)
t1,t2 = intervals[0][0],intervals[0][1]
for i in range(1,len(intervals)):
print(t1,t2,intervals[i][0],intervals[i][1])
if t1<=intervals[i][0]<=t2:
t2 = max(t2,intervals[i][1])
else:
re.append([t1,t2])
t1,t2 = intervals[i][0],intervals[i][1]
re.append([t1,t2])
#print(re)
return re
好的,关于取区间,它有另外的解释,但是,我不听耶。
官方的代码后,