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)空间。