【发布时间】:2020-02-27 05:29:57
【问题描述】:
我正在尝试解决一个分而治之的问题,其中我有一个充满真假的二维布尔数组。我试图找到一个特定的列,它是唯一的。还有另一种查找此列的方法是查找仅包含 1 个真索引而其余为假的行。我必须找到小于 O(N^2) 的解决方案
二维数组样本:
F F T F
F T T T
F F T T
T F T F
【问题讨论】:
-
我认为这是不可能的,除非数组有一些额外的约束。如果您是自己构建数组,那么您可能已经得到了答案。
-
有一个约束,如果我在数组中找到只有 1 个 true 元素的行,那么这个 1 true 的索引将与所有 true 的库相同。
-
我明白了,那么它可能在 O(n) 内完成。
-
发布了 O(n) 解决方案并投票赞成这个问题,这是一个很好的练习。
-
执行此操作的一种方法:选择任意行作为驾驶行。它显然会有正确的列。扫描此行以查找已设置的元素 ('T')。当您找到一个时,然后上下扫描该列以查找“F”。如果找到一个,则中止该列。否则,您已找到正确的列(结束)。 :) 继续扫描“驱动行”,重复扫描,直到找到正确的列。我怀疑它通常会很快。最坏的情况是可怕的。 ;-/
标签: arrays algorithm divide-and-conquer