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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值