这是一个非常著名的跨国公司问我的问题。问题如下...
输入一个由0和1组成的二维N*N数组。如果A(i,j) = 1,则与第i行和第j列对应的所有值都将变为1。如果已经有一个1,则它仍然保持为1。
例如,如果我们有以下数组:
1 0 0 0 0
0 1 1 0 0
0 0 0 0 0
1 0 0 1 0
0 0 0 0 0
我们应该得到以下输出结果:
1 1 1 1 1
1 1 1 1 1
1 1 1 1 0
1 1 1 1 1
1 1 1 1 0
输入矩阵中有很多未填充的部分。
这是否可能在小于O(N^2)的时间内完成?
另一个条件是没有提供额外的空间。我想知道是否有办法使用空间<= O(N)来实现复杂度。
附:我不需要复杂度为O(N*N)的答案。这不是一道作业题。我已经尝试过很多次,但没有得到合适的解决方案,想在这里获取一些想法。请将打印内容排除在复杂性之外。
我的大致想法是动态消除遍历的元素数量,限制它们在2N左右。但是我不能得到一个合适的想法。
O(n)
个非零元素的矩阵。 - Phil Miller