Python程序员面试算法宝典---解题总结: 第4章 数组 4.1 如何找出数组中唯一的重复元素

# -*- 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()

猜你喜欢

转载自blog.csdn.net/qingyuanluofeng/article/details/92077343
今日推荐