寻找一个长度为n+1,且值为1~n的数组中相同的两个元素最优算法

1.数学方法:

将所有元素相加,加和减去1~n之和,所得只差为重复元素值。
时间复杂度:O(n)
空间复杂度:O(1)

2.异或运算

2.1异或运算应用简介

异或运算也被称为没有进位的加法。
计算规则:相同为0,不同为1;
e.g.
1 xor 1=0 xor 0=0,
1 xor 0=1 xor 0=1

总结
1.与0异或=原值不变,与1异或=原值取反。
2.自己异或自己=置零

2.2应用:(本题)

假设:A[5]=[a,b,c,d,a],B[4]=[a,b,c,d]
则将A中所有元素异或=a xor b xor c xor d xor a=b xor c xor d
再将B中所有元素异或=a xor b xor c xor d
最后再将所得两个结果异或=a
找到重复值a。

时间复杂度:O(n)
空间复杂度:O(1)

3.其他方法

方法众多,但是上面两种应该是时空复杂度最低的了,因此不再赘述,若有相当或者更好的方法欢迎补充。

上一篇:The XOR Largest Pair之二


下一篇:LeetCode题解(1310):子数组异或查询(Python)