【发布时间】:2015-11-23 16:21:16
【问题描述】:
我们用两组整数来生成第三组,其中包含第一组中每个元素与第二组中每个元素的异或。
现在作为一个问题,我们得到了第一个集合和第三个集合,即带有异或的集合,我们需要生成第二个集合。
保证输入只有一个可能的答案
例如:
(为了清楚起见,这里使用二进制)
输入:
设置 1: {101, 111}
第三组: {001, 011}
然后Set2,解集将是
第二组: {110, 100}
如果我们这样做 Set1 ^ Set2
{011, 001, 001, 011}
要点:
输入是集合,而不是数组,所以没有重复
这并不意味着set3创建时没有重复,a^d可能等于b^c
没有大小限制,set1 和 set2 必须具有相同的大小。
另外,我的测试用例并没有那么好,看起来我们可以简单地执行 set1^set3 来得到答案,但这显然不是正确的方法。
【问题讨论】:
-
异或是一个一对一的映射,如果你根据其中一个输入把它分成两半。只需在字典中编码映射并遍历对。
-
你能详细说明把它分成两半吗
-
你不能,至少不是唯一的:first = {0b00, 0b01} and third = {0b00, 0b01, 0b10, 0b11} 可能是 second = {0b00, 0b10} 或 second = { 0b00, 0b11}.
-
抱歉,我已经更新了问题说明
-
@suyash 考虑所有 WLOG 集合中的第一个元素。如果集合 1 在位置 0 有位 0,则映射 {0:0, 1:1} 可以应用于集合 3 的位置 0。否则集合 1 在位置 0 有位 1,因此映射 {0:1, 1 :0} 可以应用于第 3 组的位置 0。
标签: algorithm