Этот алгоритм использует O (1) пространство. Ниже приведены этапы:
Найти первую строку со всеми 1 значениями. Если такой строки нет, поэтому все строки содержат по крайней мере один 0, поэтому вся матрица должна стать 0s. Держите индекс строки в переменной I.
Используйте I-я строка как флаг, чтобы сохранить значение для каждого столбца, то есть &
весь столбец и сохранить в I-й строке.
&
вся строка, за исключением I-го и заданного значения, для элементов этой конкретной строки, т.е. возьмите 1-ю строку, если она имеет хотя бы одну 0, заданную целую строку до 0, иначе оставить строку со всеми 1-м, взять вторую строку и так далее кроме меня строка.
&
I-я строка для всех других строк, то есть A[i][j] &= A[I][j]
для всех i <> I
и j=0,1,...,A[I].length-1
.
Thats all !!!
В качестве примера мы имеем
1 1 1 0 1 0
1 1 1 1 1 1
1 0 1 1 1 1
1 1 1 1 1 1
0 1 1 1 1 0
После 1-го шага мы найдем = 1 во втором ряду.
Тогда мы изменяем 2-ю строку только матрица будет стала после того, как 2-й стадии (она изменила 1-й, 2-й, 4-й и последний элемент 0, потому что нашел 0s в том, что колонки):
1 1 1 0 1 0
0 0 1 0 1 0
1 0 1 1 1 1
1 1 1 1 1 1
0 1 1 1 1 0
После шага 3 матрица стала (мы установим 0s к строкам, который имеет по меньшей мере один 0 excep 2-я строка):
0 0 0 0 0 0
0 0 1 0 1 0
0 0 0 0 0 0
1 1 1 1 1 1
0 0 0 0 0 0
После шага 4 матрица стала следующим образом (мы делаем &
операции через все столбцы):
0 0 0 0 0 0
0 0 1 0 1 0
0 0 0 0 0 0
0 0 1 0 1 0
0 0 0 0 0 0
То есть матрица мы ищем.