'''
有两个数组,数组A和数组B
其中数组A是一个乱序的0-99。100个数
数组B是从数组A中随机删除两个数后得到的,也是无序的
要求得出删除的两个数是什么
要求的时间复杂度是n,空间复杂度是1
'''
import random
import math
# 这里是生成数组
list_a = list(range(100))
random.shuffle(list_a)
list_b = list_a[:-2]
random.shuffle(list_a)
random.shuffle(list_b)
def get_two_number(l_a, l_b):
len_a = len(l_a) #a组的长度
len_b = len(l_b) #b组的长度
if len_b > len_a: #当b的长度大于a的长度,则交换a,b的位置
len_a, len_b, l_a, l_b = len_b, len_a, l_b, l_a
a_2, b_2, a_s, b_s = 0, 0, 0, 0
for idx in range(len_a):
a_2 += l_a[idx] ** 2 #求出A组的平方和
a_s += l_a[idx] #求出A组的和
if idx < len_b: #如果A组的索引小于B组的长度,即遍历到A-2,也就是B组的长度
b_2 += l_b[idx] ** 2 #求出B组的平方和
b_s += l_b[idx] #求出B组的和
x_and_y = a_s - b_s #求出AB和之差
x_2_and_y_2 = a_2 - b_2 #求出AB平方差
# math.sqrt(x) 求出x 的平方根,100--->10
#假设求的两个数是 x,y
#即 x+y = AB数组和之差, x^2+y^2 = AB数组平方和之差,
x = (- (-x_and_y) + math.sqrt(x_and_y ** 2 - 4 * 1 * (x_and_y ** 2 - x_2_and_y_2) / 2)) / (2 * 1)
y = (- (-x_and_y) - math.sqrt(x_and_y ** 2 - 4 * 1 * (x_and_y ** 2 - x_2_and_y_2) / 2)) / (2 * 1)
return int(x), int(y)
print(get_two_number(list_a, list_b))