补充几点想法:
- 实际运行的部分很短,但是先后各种测试的过程,及其思路倒是有点漫长, 也是值得记录下来的。
- for 循环里面,不管你操作还是不操作,指针都是要走的,但是while里面,你可以拉住不让它走。
class Solution:
def merge(self, intervals: List[List[int]]) -> List[List[int]]:
# 自己独立完成的。
# 对于这样一个例子 [[1,4],[4,5],[2,3]] 实际预期结果是 [1,5] 怎样调整????
intervals.sort()
if len(intervals) < 2:
return intervals
# ret = []
# 这里有一种情况是,如果合并之后,还能继续合并的话,那么怎么处理呢? 外面再增加一层while 循环吗???
# 其实这里已经是使用了额外的空间了。如果再原数组上直接修改呢。
# while True:
ret = []
i = 0
# !!! 划一下重点!!!
# 这里,如果当前2个区间能合并的话,指针就停留在这里。一直等待下一个来合并的元素。
# 不能合并的话,才转到下一个。
#
while i < len(intervals)-1:
a,b = intervals[i]
m,n = intervals[i+1]
if m <= b:
intervals[i] = [min(a,m), max(b,n)]
intervals.pop(i+1)
else:
i += 1
# print(intervals)
return intervals
# while True:
# for i in range(len(intervals)-1):
# a,b = intervals[i]
# m,n = intervals[i+1]
# if m <= b:
# ret.append([min(a,m), max(b,n)])
# intervals.pop(i)
# i += 1
# if intervals[i+1][0] <= intervals[i][1]:
# if m <=b:
# ret.append([a,n])
# intervals[i][1] = intervals[i+1][1]
# # intervals[i+1][0] = intervals[i][0]
# intervals[i] = [min(a,m), max(b,n)]
# intervals[i+1] = [min(a,m), max(b,n)]
# if intervals[i] not in ret:
# ret.append(intervals[i])
# # 这里的写法就很拙劣了。甚至是卑鄙啊
# if intervals[i+1] not in ret:
# ret.append(intervals[i+1])
# print(intervals) # 一圈之后还是需要再清洗的。
# for i in intervals:
# if i not in ret:
# ret.append(i)
# if len(ret) == len(intervals):
# break
# else:
# intervals = ret
# return ret
# else:
# ret.append(intervals[i+1])
# i += 1
# 合并一圈之后,我们再来比较一下原数组的长度有没有被缩短
# if len(ret) == len(intervals):
# break
# else:
# intervals = ret
# # print(intervals)
# for i in intervals:
# if i not in ret:
# ret.append(i)
# return ret
网友评论