在行和列中查找具有相同编号的位置

时间:2015-11-27 14:09:09

标签: algorithm

给定一个相等维度的二维数组(即nxn)只包含0和1,我如何找到(忽略matrix [i] [i])第i行包含全0和第i列这一切都是1。如果不存在这样的i,则返回-1。

matrix [i] [i]可以有任何东西。

预期时间复杂度为O(n)

例如

对于给定的4 x 4矩阵

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

答案是1(i基于零),因为第2行全部为0,第2列全部为1(忽略[1,1]处的值)。

3 个答案:

答案 0 :(得分:4)

首先,这样的矩阵只有1或0个答案。

  1. 从第一行开始行走直到找不到1(对角线值 应该被忽略)。
  2. 开始按列行走直至找不到0.如果到达对角线,请转到步骤1.
  3. 重复1直到不离开矩阵。
  4. 例如,你在索引i的行或列中出去,你应该验证我是答案。答案是i或-1。

    当每个动作处理1行或1列时,操作总量将为n + n,要验证所需的答案需要按1行和1列行走它将消耗n + n个动作,我们总共有4 * n个动作这是< strong> O(n)复杂性。

    步行示例:

    0 0 0 1 S S S S S S
    S S S 1 S S S S S S
    S S S 0 0 0 1 S S S
    S S S S S S 1 S S S
    S S S S S S 1 S S S
    S S S S S S 1 S S S
    S S S S S S 1 0 0 0 X
    S S S S S S S S S S
    S S S S S S S S S S
    S S S S S S S S S S
    

    您应该验证7的答案。

答案 1 :(得分:0)

让我们得到一些理论:

如果存在一个全列(忽略对角线),则最多可以有一行全为零。

相反,如果存在全零行,则最多只能有一个全列。

这使得问题基本上是线性的。

答案 2 :(得分:-3)

解决方案是:

return -1

因为如果某些行全部为零,而某些列全部为全部,那么它们将在它们相交的单元格中会是什么?