4.4python如何找出数组中丢失的数

题目描述:

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

方法:

  1. 累加求和
  2. 异或法

1.累加求和
定义两个数 suma,sumb,其中,suma表示的是这 n-1 个数的和,sumb表示的是这 n 个数的和,显然缺失的数字的值即为 sumb-suma的值。

代码实现:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Time    : 2020/1/27 17:13
# @Author  : buu
# @Software: PyCharm
# @Blog    :https://blog.csdn.net/weixin_44321080
def getNum(arr):
    if arr == None or len(arr) < 0:
        print('参数不合理!')
        return -1
    suma = 0
    sumb = 0
    i = 0
    while i < len(arr):
        suma += arr[i]  # 数组的和
        sumb += i
        i += 1
    sumb = sumb + len(arr) + len(arr) + 1
    return sumb - suma


if __name__ == '__main__':
    arr = [1, 4, 3, 2, 7, 5]
    print('result1:', getNum(arr))

结果:
在这里插入图片描述
算法性能分析:
时间复杂度为O(n);
注意防止溢出。

2.异或法
在这里插入图片描述
代码实现:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Time    : 2020/1/27 17:23
# @Author  : buu
# @Software: PyCharm
# @Blog    :https://blog.csdn.net/weixin_44321080
def getNum(arr):
    if arr == None or len(arr) <= 0:
        print('参数不合理!')
        return
    a = arr[0]
    lens = len(arr)
    i = 1
    while i < len(arr):
        a ^= arr[i]
        i+=1
    for j in range(1, lens + 2):
        a ^= j
    return a


if __name__ == '__main__':
    arr = [1, 4, 3, 2, 7, 5]
    print('result2:', getNum(arr))

结果:
在这里插入图片描述
算法性能分析:
时间复杂度为O(n)

end

发布了76 篇原创文章 · 获赞 2 · 访问量 2547

猜你喜欢

转载自blog.csdn.net/weixin_44321080/article/details/104094080
今日推荐