给定MxN矩阵,计数0s,其行和列仅包含一个零

时间:2019-05-08 08:55:14

标签: javascript arrays algorithm matrix data-structures

例如:

输入:

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

输出:       1(因为我们只有(1,2)个索引具有0,而其行和列仅具有一个0)

我尝试了以下操作:

我正在从Matrix获取所有零元素。

然后将它们存储到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 个答案:

答案 0 :(得分:1)

您的方法可以优化为使用两个数组而不是哈希映射(应该更快):

  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);