我今天遇到了这个采访问题,详情如下:
你得到一个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,则将所有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)]
这里我们可以删除第一个索引中存在1的元素。即[1,0,0,0]
我觉得这种方法是错误的,如果这种方法完全错误的话,请注意做一些修改以使其成为正确或任何指针。
答案 0 :(得分:2)
你忘记了第0步:丢弃每一行有一个N,其中N有一个0.你的算法是正确的,因为没有一个被丢弃的行可以是OR等于N的一部分,剩下的所有子集的OR都是当且仅当所有内容的OR不是N时,行不是N,这是当且仅当OR中的某些列为0时应该为1的情况,当且仅当所有行都为1时才能实现该列已删除。