Algorithm 给定0/1的二维数组,查找要删除的最小行,以便n可以';不能由任何行或任何行创建

Algorithm 给定0/1的二维数组,查找要删除的最小行,以便n可以';不能由任何行或任何行创建,algorithm,data-structures,Algorithm,Data Structures,今天我遇到了这个面试问题,具体情况如下: 您将获得一个由0和1组成的二维数组: 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,元素=1,0,0,0]

今天我遇到了这个面试问题,具体情况如下:

您将获得一个由0和1组成的二维数组:

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,元素=1,0,0,0]

我的解决办法是:

  • 创建一个大小为4的新0/1一维数组(本例中每个元素的长度)
  • 如果该位置的位为1,则对所有1求和,如果该位置的位为零,则存储“n-(1的计数)”。e、 g.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)]
    
  • 这里我们可以删除第一个索引中存在1的元素。i、 e.[1,0,0,0]


  • 我有一种感觉,这种方法是错误的,我正在寻找一些修改以使其正确,或者如果这种方法完全错误,则寻找任何指针。

    您忘记了步骤0:放弃每一个有1的行,其中N有0。您的算法在其他方面是正确的,因为丢弃的行中没有一行可以是或等于N的一部分,并且剩余行的所有子集的或不是N当且仅当所有行的或不是N时,即当且仅当中的某个列为0或当其应为1时,只有当且仅当该列中所有带1的行都被删除时,才能完成此操作。

    您所说的“如果我们删除[1,1,1,0]”是什么意思?您的数组中没有这样的元素。可以使用哪些操作从输入数字列表中获取N?@Kametrixom:谢谢您指出,我已经修复了文本。@Rubens我们只能使用OR运算符。@diwakarb我在你的帖子中用[1,0,0,0]替换了[1,1,0]中出现的另一个[1,1,0]项。也许我没有正确回答你的问题,但我们需要删除元素,以便“无法”用剩余元素创建N。@diwakarb我意外地翻转了if和only if