algorithm - 用零标记所有列和行

标签 algorithm data-structures

这是一道面试题:在一个mxn大小的二维数组中,对于每一个值为0的元素,将该元素所在的整行整列都置0,其余元素保持不变。

我能想到的方法是遍历数组中的每个元素,每次遇到零时,我都用零标记整个行和列。但这是幼稚的,请提出任何改进建议。

最佳答案

如果允许额外的空间。只需维护两个标志数组即可。

一个代表行,另一个代表列。所有默认值设置为 1。

扫描你的原始矩阵,假设你在 x 行和 y 列找到一个 0。只需设置 row[x] = 0;和列[y] = 0;

然后再次扫描你的矩阵

for ( int i = 0; i < height; ++i )
  for ( int j = 0; j < width; ++j )
    M[i][j] = M[i][j] * row[i] * column[j];

然后你得到你的矩阵 M 改变

关于algorithm - 用零标记所有列和行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18640970/

相关文章:

algorithm - 给定一个字符串,只需要一次扫描就可以找到它的第一个非重复字符

c# - 确定圆上的线段选择

python - 如何将可迭代对象拆分为两个具有交替元素的列表

c++ - 查找要删除重复项的项目

algorithm - 优化算法以降低时间复杂度(使用的 redis 数据类型)

c - 传递未初始化的变量使用 C 抛出错误

c++ - 如何用C++模拟数字电路(只是输入/输出,没有图形)

algorithm - 使用优化算法寻找网络中的最短路径

python - 从单独的列表创建字典列表

c - 动态创建适当对齐的 C 结构内存内容