У меня есть список списков A
длины m
. Каждый список из A
содержит положительные числа из {1, 2,..., n}
. Ниже приведен пример, где m = 3
и n = 4
.
A = [[1, 1, 3], [1, 2], [1, 1, 2, 4]]
Я представляю каждое число x
в A
как пару (i, j)
где A[i][j] = x
. Я хотел бы отсортировать числа в A
в неубывающем порядке; разрыв связей по первому индексу. То есть, если A[i1][j1] == A[i2][j2]
, то (i1, j1)
предшествует (i2, j2)
iff i1 <= i2
.
В этом примере я хотел бы вернуть пары:
(0, 0), (0, 1), (1, 0), (2, 0), (2, 1), (1, 1), (2, 2), (0, 2), (2, 3)
который представляет отсортированные числа
1, 1, 1, 1, 1, 2, 2, 3, 4
То, что я сделал, - это наивный подход, который работает следующим образом:
- Сначала я сортирую список в
A
- Затем я повторяю числа в
{1, 2,..., n}
и списокA
и добавляем пары.
Код:
for i in range(m):
A[i].sort()
S = []
for x in range(1, n+1):
for i in range(m):
for j in range(len(A[i])):
if A[i][j] == x:
S.append((i, j))
Я думаю, что этот подход не очень хорош. Мы можем сделать лучше?