Таким образом, мы должны выполнить сортировку два раза, и мы оставим первичную сортировку по координатам x (и логическим) в последнюю очередь. Мы сделаем сортировку, где направление сортировки сначала будет изменено с помощью логического флага. Вот оно:
data.sort(key=lambda k: -k[1] if k[2] else k[1])
, после чего следует первичная сортировка:
data.sort(key=lambda k: (k[0], -k[2]))
Вот полный код с input.
def main():
sol = Solution() # None
arg1 = [[1,3,4],[3,4,4],[2,6,2],[8,11,4],[7,9,3],[10,11,2]]
r = sol.getSkyline(arg1)
print(r)
class Solution:
def getSkyline(self, buildings: List[List[int]]) -> List[List[int]]:
if not buildings: return []
data = []
def compare(x, start):
print(x, start)
return (x, start)
for building in buildings:
data.append([building[0], building[2], True])
data.append([building[1], building[2], False])
data.sort(key=lambda k: -k[1] if k[2] else k[1])
data.sort(key=lambda k: (k[0], -k[2]))
return data
if __name__ == '__main__':
main()
Вот вывод:
[1, 4, True]
[2, 2, True]
[3 , 4, True]
[3, 4, False]
[4, 4, False]
[6, 2, False]
[7, 3, True]
[8, 4, True]
[9, 3, False]
[10, 2, True]
[11, 2, False]
[11, 4, False]