.sort(key=lambda x: x[0])
和 .sort(key=lambda x: (x[0], -x[1]))
有什么区别?我认为它们都会基本地对列表进行排序。我用一个例子试了一下:
lst = [[2,1], [0,4], [6,7], [3, 5]]
lst.sort(key=lambda x: x[0])
print(last)
>>> [[0, 4], [2, 1], [3, 5], [6, 7]]
lst = [[2,1], [0,4], [6,7], [3, 5]]
lst.sort(key=lambda x: (x[0], -x[1]))
print(last)
>>> [[0, 4], [2, 1], [3, 5], [6, 7]]
在这种情况下,它们的工作方式是相同的。
然而,在这个LeetCode问题中,当我使用第一种方法(key=lambda x: x[0]
)时,我得到了错误的答案。
当我使用第二种方法(key=lambda x: (x[0], -x[1])
)时,解决方案被接受。
我的最终代码如下:
class Solution:
def removeCoveredIntervals(self, intervals: List[List[int]]) -> int:
# intervals.sort(key=lambda x: x[0])
intervals.sort(key=lambda x: (x[0], -x[1]))
last = -1
removed = 0
for i in intervals:
if i[1] <= last:
removed += 1
else:
last = i[1]
return len(intervals) - removed
此外,我猜问题出在以相同左端点开头的时间区间上(就像错误答案中所示)。当我单独尝试该测试用例时,我得到了以下结果:
lst = [[1,2], [1,4], [3,4]]
lst.sort(key=lambda x: x[0])
print(last)
>>> [[1, 2], [1, 4], [3, 4]]
lst = [[1,2], [1,4], [3,4]]
lst.sort(key=lambda x: (x[0], -x[1]))
print(last)
>>> [[1, 4], [1, 2], [3, 4]]
虽然看起来似乎右端点的顺序有点不同。