zoukankan      html  css  js  c++  java
  • 求随机数组中删除的两个数

    '''
    有两个数组,数组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))
    
  • 相关阅读:
    linux screen 命令详解
    centos7 安装docker(手动和脚本安装)换源 卸载
    在linux上安装taiga
    阿里云清除云盾
    Vim
    推荐 130 个令你眼前一亮的网站,总有一个用得着
    索引优化分析 2
    Mysql的主存复制 5
    Mysql锁机制 4
    查询获取分析 3
  • 原文地址:https://www.cnblogs.com/maqian/p/14841979.html
Copyright © 2011-2022 走看看