有一组连续正整数,随机乱序后生成一组数据后,小蓝不小心删掉了其中一个数,已知所删掉的这个数不是这组数据中最小的也不是最大的,现在请你编写Python程序帮助小蓝找到删除的那个数。
时间: 2024-05-27 10:14:27 浏览: 8
假设原来这组连续正整数的首项为a,末项为b,一共有n个数。则它们的和为:
sum = (a+b)*n/2
现在我们将这组数据随机乱序后,然后删除其中一个数,得到的序列的和为:
sum1 = (a+b)*n/2 - x
其中x为被删除的数。我们可以遍历随机乱序后的序列,将其中的每个数都减去后面的所有数的和,再加上前面所有数的和,得到的结果就是被删除的数。具体步骤如下:
1. 遍历随机乱序后的序列,计算出每个数后面的所有数的和,存储在一个列表中。
2. 定义一个变量prefix_sum,表示前面所有数的和,初始化为0。
3. 从序列的第一个数开始遍历,对于每个数,执行以下操作:
a. 将prefix_sum加上前面所有数的和,得到当前位置的前缀和。
b. 将当前位置的前缀和减去后面所有数的和,得到当前位置的后缀和。
c. 如果后缀和等于sum - sum1,说明当前位置的数被删除了,返回该数。
完整的Python代码如下:
def find_missing_num(arr):
n = len(arr) + 1
a = arr[0]
b = arr[-1]
sum = (a+b)*n//2
sum1 = 0
for num in arr:
sum1 += num
x = sum - sum1
prefix_sum = 0
for i in range(n-1):
prefix_sum += arr[i]
suffix_sum = prefix_sum - sum1 + arr[i+1:].sum()
if suffix_sum == x:
return arr[i]
# 测试
arr = [3, 6, 2, 4, 7, 5]
missing_num = find_missing_num(arr)
print(missing_num) # 输出:1