给定0-1的二维数组,找到要删除的最小行,这样就不能通过任何行的OR创建n

时间:2015-07-11 12:43:53

标签: algorithm data-structures

我今天遇到了这个采访问题,详情如下:

你得到一个0和1的2 d数组:

arr = [[0,1,0,1],\\binary rep of 5
       [1,0,0,0],\\binary rep of 8
       [0,1,1,1],\\binary rep of 7
       [0,0,0,1]]\\binary rep of 1

给定一个数字N让我们说9.如果我们删除[1,0,0,0],我们将无法通过其余数字创建9。所以答案是count = 1和element(s)= [1,0,0,0]

我的解决方案是:

  1. 创建一个大小为4的新0/1 1-d数组(在我们的例子中每个元素的长度)
  2. 如果该位置的位为1,则将所有1的总和相加,如果该位置的位为零,则我们将存储“n - (1的计数)”。例如9的二进制表示是[1,0,0,1]因此新数组将是:

    [1(total 1's in first index),
     2(total 0's in second),
     3(total 0's in 3rd index),
     3(total 1's in 4th)]
    
  3. 这里我们可以删除第一个索引中存在1的元素。即[1,0,0,0]

  4. 我觉得这种方法是错误的,如果这种方法完全错误的话,请注意做一些修改以使其成为正确或任何指针。

1 个答案:

答案 0 :(得分:2)

你忘记了第0步:丢弃每一行有一个N,其中N有一个0.你的算法是正确的,因为没有一个被丢弃的行可以是OR等于N的一部分,剩下的所有子集的OR都是当且仅当所有内容的OR不是N时,行不是N,这是当且仅当OR中的某些列为0时应该为1的情况,当且仅当所有行都为1时才能实现该列已删除。