# -*- coding: utf-8 -*-
'''
Python程序员面试算法宝典---解题总结: 第4章 数组 4.1 如何找出数组中唯一的重复元素
题目:
数字1~1000放在含有1001个元素的数组中,其中只有唯一的一个元素值重复,
其他数字均只出现一次。设计一个算法,将重复元素找出来,要求每个数组元素
只能访问一次。如果不使用辅助存储空间,能否设计一个算法实现?
分析:
最简单的方法,累加,计算1+2+...+1000的值为sum1.
计算整个数组的累加和为sum2,sum2-sum1即可得到重复元素。
如果用离散数学中的异或操作:
a与a异或结果为0
将数组中所有元素异或,并与(1^2^...^1000)异或即可
关键:
1 相同两个元素异或结果为0
2 没有想到
是因为异或是拿整个数组与1~1000异或
参考:
Python程序员面试算法宝典
'''
def findUniqueRepeatedElement(array):
if not array:
return
result = 0
for value in array:
result ^= value
length = len(array)
for value in range(1, length):
result ^= value
return result
def process():
array = list(range(1, 6)) + [3]
result = findUniqueRepeatedElement(array)
assert result == 3
if __name__ == "__main__":
process()