hackerrank xor在数组中

时间:2015-12-26 12:52:40

标签: java arrays data-structures xor

我正在尝试解决hackerrank上的this问题,我花了一些时间来解决问题。

诀窍在于xor的属性以及数字出现在数组子集中的次数,其中子集是连续的(请注意)

因此,如果我们有1,2,3子集将是:

1
1,2
1,2,3
2
2,3
3

索引i中的值出现在这些子集中的次数是(n-i)*(i+1),因为可以看出1出现(3-0)*(0 + 1)= 3次。 n 是数组的长度。

第二个技巧是XOR一个数字是0自身如果我们取这个数字偶数次,如果它看起来奇数次答案是数字本身,那么重要的是要注意{ {1}}操作是关联的。

问题要求我们对子集进行xor,然后取每个结果值的XOR

因此,我不计算蛮力,而是计算每个数字出现在数组中的次数,并检查它是否出现偶数次或奇数次,但是8个测试用例通过,4次失败。测试用例太长,无法调试或干运行。

我的问题是4个测试用例失败的原因。这是Java代码。

XOR

1 个答案:

答案 0 :(得分:1)

原因是

溢出
(j+1)*(n-j)

该产品可能为~10^10,因为数组的总大小最多为10^5

因此,您需要使用long计算此产品。

我使用这个虚拟更改测试了您的代码:

long a = j + 1;
long b = (n - j);

if((a*b)%2==1) {
    an=an^arr[j]; 
}

程序成功通过了所有测试。