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

给定一个相等维度的二维数组(即nxn)只包含0和1,我怎样才能找到(忽略matrix [i] [i])第i行包含全0和第i列包含全部0和1 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(我基于零),因为第二行全部为0,第二列全部为1(忽略[1,1]处的值).

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

>从第一行开始步行,直至找不到1(对角线值
应该被忽略).
>开始按列行走,直到找不到0.如果到达对角线,请转到步骤1.
>重复1直到不离开矩阵.

例如,你在索引i的行或列中出去,你应该验证我是否是答案.答案是i或-1.

由于每个动作句柄1行或1列总动作量将为n n,为了验证所需的答案需要按1行和1列行走,它将消耗n n个动作,我们总共有4 * n个动作,这是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的答案.

点赞