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文件属性
    Linux 学习笔记
    一些常见的第三方UI库
    list转化为json数组
    在js文件里调用另一个js文件里的函数
    Intellij idea创建maven项目并配置tomcat
    使用JS语句,利用for循环的方法创建表格的两种方法
    intellij idea 破解教程
    Jquery中的DOM操作:
  • 原文地址:https://www.cnblogs.com/maqian/p/14841979.html
Copyright © 2011-2022 走看看