Учитывая MxN Matrix, подсчитайте число 0, строка и столбец которого состоит только из одного НУЛЯ. - PullRequest
0 голосов
/ 08 мая 2019

Например:

Введите:

//MxN matrix
matrix = 
  [
    [ 0, 0, 1 ], 
    [ 1, 1, 0 ], 
    [ 0, 1, 1 ]
  ]

Выход: 1 (потому что у нас есть только (1,2) индекс с 0, в строке и столбце которого только один 0)

Я пробовал следующее:

Я получаю все нулевые элементы из матрицы.

Затем сохраните их в HashMap следующим образом:

Indexes which has 0s : [(0,0), (0,1), (1,2), (2,0)]

Hashmap["Row 0"] = 2;
HashMap["Row 1"] = 1;
HashMap["Row 2"] = 1;
HashMap["Col 0"] = 2;
HashMap["Col 1"] = 1;
HashMap["Col 2"] = 1;

1 в хэш-карте (строка 1, строка 2 и столбец 1, столбец 2) Я должен получить (1,2)

Невозможно написать код для этого подхода, и есть ли лучший подход.

1 Ответ

1 голос
/ 08 мая 2019

Ваш подход может быть оптимизирован для использования двух массивов вместо хэш-карты (должно быть быстрее):

  var matrix = [
    [ 0, 0, 1, ],
    [ 1, 1, 0, ],
    [ 0, 1, 1, ],
  ];

  // count zeroes on rows and columns
  var row0 = new Array(matrix.length).fill(0);
  var col0 = new Array(matrix[0].length).fill(0);

  for (var i = 0; i < matrix.length; i++) {
    for (var j = 0; j < matrix[i].length; j++) {
      if (!matrix[i][j]) {
        row0[i]++;
        col0[j]++;
      }
    }
  }

  // count single zeroes on their respective row and column
  var count = 0;
  for (var i = 0; i < matrix.length; i++) {
    for (var j = 0; j < matrix[i].length; j++) {
      if (!matrix[i][j] && row0[i] == 1 && col0[j] == 1) {
        console.log(i, j);
        count++;
      }
    }
  }
  console.log(count);
...