当前位置: 首页 > 面试题库 >

如果该行或列包含0,则将矩阵中的每个单元格设置为0

茹展鹏
2023-03-14
问题内容

想要改善这篇文章吗? 提供此问题的详细答案,包括引文和答案正确的解释。答案不够详细的答案可能会被编辑或删除。

给定一个0x和1s的NxN矩阵。将包含a的每一行设置0为all 0,并将包含a的每一列设置0为all 0

例如

1 0 1 1 0
0 1 1 1 0
1 1 1 1 1
1 0 1 1 1
1 1 1 1 1

结果是

0 0 0 0 0
0 0 0 0 0
0 0 1 1 0
0 0 0 0 0
0 0 1 1 0

一位微软工程师告诉我,有一种解决方案不涉及额外的内存,仅涉及两个布尔变量和一次传递,因此我正在寻找该答案。

顺便说一句,假设它是一个位矩阵,因此矩阵中只能包含1和0。


问题答案:

好的,我在这里是凌晨3点,所以很累,但是我第一次尝试对矩阵中的每个数字进行精确2次遍历,所以在O(NxN)中,矩阵的大小是线性的。

我使用第一列和第一行作为标记来知道哪里只有1的行/列。然后,有2个变量l和c可以记住第一个行/列是否也都是1。因此,第一遍设置标记并将其余的重置为0。

第二遍在行和列标记为1的位置设置1,并根据l和c重置第一行/列。

我强烈怀疑我能否一口气完成,因为一开始的方块取决于最后的方块。也许我的第二次通过可以变得更有效率…

import pprint

m = [[1, 0, 1, 1, 0],
     [0, 1, 1, 1, 0],
     [1, 1, 1, 1, 1],
     [1, 0, 1, 1, 1],
     [1, 1, 1, 1, 1]]



N = len(m)

### pass 1

# 1 rst line/column
c = 1
for i in range(N):
    c &= m[i][0]

l = 1
for i in range(1,N):
    l &= m[0][i]


# other line/cols
# use line1, col1 to keep only those with 1
for i in range(1,N):
    for j in range(1,N):
        if m[i][j] == 0:
            m[0][j] = 0
            m[i][0] = 0
        else:
            m[i][j] = 0

### pass 2

# if line1 and col1 are ones: it is 1
for i in range(1,N):
    for j in range(1,N):
        if m[i][0] & m[0][j]:
            m[i][j] = 1

# 1rst row and col: reset if 0
if l == 0:
    for i in range(N):
        m [i][0] = 0

if c == 0:
    for j in range(1,N):
        m [0][j] = 0


pprint.pprint(m)


 类似资料:
  • 有没有人知道一个vba代码,如果a列中的任何单元格包含单词“total”,就可以删除整行?例如,A38包含“total”,则删除整行。下个月,单元格A44包含单词“total”,删除整行。诸如此类....谢谢!

  • 嗨,我需要移动每行(扫描)中的一个单元格范围,这些单元格包含特定列(在我的情况下可以是任何列,但在我的代码中是coln“e”)中的一个单元格,该值以文本字符串L开始。以下是我所尝试的(我是VBA新手)。在本例中,我希望将移动到,其中是行号。

  • 我有一个servlet,它接收一组数据,进行处理,并根据表单提交将其写入excel文件或文本页面。在处理Excel时,所有的处理都在使用Apache POI的相应模型中进行。我正在尝试修改它,以便它根据所包含的数据对行进行颜色编码,但是,在将颜色应用于行之后,当我将工作簿写入文件输出流时,颜色不存在。我正在将数据处理成excel文件,如下所示: MCVE公司 我仍然得到excel文件,但格式不存在

  • 我正在使用OpenCV一段时间,现在我需要这种类型的乘法: 定义一个矩阵,其中包含类型为1的元素。矩阵的大小为:M X N。矩阵必须与Vector相乘,Vector的大小为:N X 1,包含双

  • 我对java编程还是相当陌生的,很难理解一些概念,尤其是设置单元格值。(如果有人能用外行的话来解释这一点,那就太棒了!) 这是我的问题。。。 我有一个tableview,其中加载了一个来自derby数据库中数据表的。将数据添加到表中的for循环是我从在线查看中学到的,它对我来说确实有效。我想更进一步,所以这是我的挑战。。。 将有如下示例:第1行[toy,high等]第2行[box,Middle等]

  • 给定矩阵(大小by)和幂,(例如,4),产生矩阵,其中每个-th矩阵包含所有中的列在该程度上的可能组合。 在我当前的方法中,我生成-th矩阵,然后在下一次调用中使用它来生成th矩阵。对于给定的功率,这是否可以“自动”完成,而不是手动完成? 说到R,我是一个新手,我明白有可能比下面的尝试更有效、更优雅地实现这个解决方案。。。 有人能提供一些建议吗?我的目标是为给定的矩阵创建一个函数,并以更“自动化”

  • 考虑矩阵: 然后,列表: 如果badcombos矩阵中的任何颜色组合出现在列表中(即上例中的子列表[[3]]和[[4]]),则将从列表中删除,我如何根据这些条件“减少”列表。

  • 问题内容: 我有一个将Android数据保存在其中的函数,但必须将数据转换为。 只要是我想保存为 以下是我的代码,只要值是 将上述转化为。 这是我决定要执行的操作,但是仍然无法将字符串值转换为每当它的。 然后功能 我应该如何对其进行更改以使其起作用? 问题答案: 不用编写自己的函数,而是使用try-catch的内部构造。您的问题是,or 或值本身是a,并且您在null引用上调用方法。请尝试以下操作