Это зависит от вашей структуры данных.
Есть только два возможных случая для строк:
- Строка i заполняется единицами, если есть элемент (i, _) на входе
- Все остальные строки одинаковы: то есть j-й элемент равен 1, если на входе есть элемент (_, j).
Следовательно,Результат может быть представлен компактно как массив ссылок на строки.Поскольку нам нужны только две строки, результат также будет занимать только O (N) памяти.В качестве примера это может быть реализовано в Python следующим образом:
def f(element_list, N):
A = [1]*N
B = [0]*N
M = [B]*N
for row, col in element_list:
M[row] = A
B[col] = 1
return M
Пример вызова будет
f([(1,1),(2,2),(4,3)],5)
с результатом
[[0, 1, 1, 1, 0], [1, 1, 1, 1, 1], [1, 1, 1, 1, 1], [0, 1, 1, 1, 0], [1, 1, 1, 1, 1]]
Важный моментзаключается в том, что массивы здесь не копируются, т. е. M [row] = A является просто назначением ссылки.Следовательно, сложность O (N + M), где M - длина входа.