【python】找出数组中丢失的数?

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

分析:异或法。异或运算,当参与运算的两个数相同时,结果为假,当两个数不同,则结果为真。

a = 1 ^ 2 ^ 3 ^ ...^ n。b = 1 ^ 2 ^ 3^...(m-1) ^ (m+1) ^ ...^n,其中m表示缺失数字。所以a ^  b = (1 ^ 1)^(2 ^ 2)...(m-1) ^(m-1)^m^(m+1)^(m+1)...^(n^n) = m。

code:

def getNum(arr):

    if arr is None or len(arr) <= 0:

        return -1

    a = arr[0]

    i = 1

    while i < len(arr):

        a ^= arr[i]

        i += 1

    b = 1

    i = 2

    while i <= len(arr) + 1:

        b ^= i

        i += 1

    return a ^ b

if __name__ == "__main__":

    arr = [1, 4, 3, 2, 7, 5]

    print(getNum(arr))

程序运行结果为:

6

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容