Python programmers interview book --- problem-solving algorithm Summary: Chapter 4 Array 4.4 How to find the missing number in an array

# -*- coding: utf-8 -*-

'''
Python程序员面试算法宝典---解题总结: 第4章 数组 4.4 如何找出数组中丢失的数

题目:
给定一个由n-1个整数组成的未排序的数组序列,其元素都是1到n中的不同的整数。
请写出一个寻找数组序列中缺失整数的线性时间算法。

分析:
假设n为6,数组为[1,5,2,4,6]。
方法1: 暴力破解就是计算1到n的整数和然后减去数组和,不过这样如果数组很大,可能导致溢出
问题。
方法2: 能不能仿效之前异或求解唯一重复元素的方法来做。
求出1~n的异或结果,然后求出整个数组异或的结果,两个异或结果再异或一下,
即可。
最简单的例子,假设n为3,给定数组为[1,2]
那么1,2,3的异或结果result1=1^2^3=0001^0010^0011=0011^0011=0000
那么1,2的异或结果result2=1^2=0001^0010=0011
result1和result2的异或结果=0000^0011=0011=3
就这样做。

关键:
1 寻找重复/丢失的数字一定要首先考虑异或方法

参考:
Python程序员面试算法宝典
'''

def findMissingNumber(data, n):
    if not data:
        return
    if n < 1:
        return
    result1 = 0
    for value in data:
        result1 ^= value
    result2 = 0
    for value in range(1, n+1):
        result2 ^= value
    result = result1^result2
    return result

def process():
    data = [1, 2]
    n = 3
    result = findMissingNumber(data, n)
    assert result == 3
    data = [1,5,2,4,6]
    n = 6
    result = findMissingNumber(data, n)
    assert result == 3


if __name__ == "__main__":
    process()

 

Guess you like

Origin blog.csdn.net/qingyuanluofeng/article/details/92389996