求随机数组中删除的两个数

'''
有两个数组,数组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))
posted @ 2021-06-02 16:58  豆子V  阅读(69)  评论(0编辑  收藏  举报