Javascript 给定MxN矩阵,计数行和列仅由一个零组成的0

Javascript 给定MxN矩阵,计数行和列仅由一个零组成的0,javascript,arrays,algorithm,matrix,data-structures,Javascript,Arrays,Algorithm,Matrix,Data Structures,例如: 输入: //MxN matrix matrix = [ [ 0, 0, 1 ], [ 1, 1, 0 ], [ 0, 1, 1 ] ] 输出: 1(因为我们只有(1,2)个索引有0,其行和列只有一个0) 我尝试过以下方法: Indexes which has 0s : [(0,0), (0,1), (1,2), (2,0)] Hashmap["Row 0"] = 2; HashMap["Row 1"] = 1; HashMap["Row 2"]

例如:

输入:

//MxN matrix
matrix = 
  [
    [ 0, 0, 1 ], 
    [ 1, 1, 0 ], 
    [ 0, 1, 1 ]
  ]
输出: 1(因为我们只有(1,2)个索引有0,其行和列只有一个0)

我尝试过以下方法:

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;
我从矩阵中得到所有的零元素

然后将它们存储到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)


无法为此方法编写代码,是否有更好的方法。

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

var矩阵=[
[ 0, 0, 1, ],
[ 1, 1, 0, ],
[ 0, 1, 1, ],
];
//在行和列上计数零
var row0=新数组(矩阵长度).fill(0);
var col0=新数组(矩阵[0]。长度)。填充(0);
对于(变量i=0;i
@adiga更新了我的方法。我觉得你可以实现如下内容。将包含两个或多个零的行或列的列表放在一起。在矩阵的副本上,删除(或划掉,只需将所有条目设为9)这些行或列。计算剩余的零数。在时间复杂度和空间复杂度方面是否有任何优化方法。上面的代码在O(n2)时间和空间复杂度下运行,并且需要O(n)额外的内存(
row0
col0
数组)。这是渐近最优的,因为输入矩阵有n2个元素。您可以进行一些持续的优化,但为了清晰起见,我选择不进行。例如,在第二个矩阵过程中,对于当前行
i
,您只需要
row0[i]
。这意味着您可以去掉数组
row0
,并在每行的开头计算一个(标量)值。这节省了O(n)空间。