zoukankan      html  css  js  c++  java
  • 无序的两个列表,数据重组,使得两个列表的和的差值最小

    华为一道编程

    有两个序列a,b,大小都为n,序列元素的值任意整形数,无序;
    要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小。
    1. 将两序列合并为一个序列,并排序,为序列Source
    2. 拿出最大元素Big,次大的元素Small
    3. 在余下的序列S[:-2]进行平分,得到序列max,min
    4. 将Small加到max序列,将Big加大min序列,重新计算新序列和,和大的为max,小的为min。

    def mean(sorted_list):
        if not sorted_list:
            return ([],[])
        big = sorted_list[-1]
        small = sorted_list[-2]
    
        big_list,small_list = mean(sorted_list[:-2])
        big_list.append(small)
        small_list.append(big)
        big_list_sum = sum(big_list)
        small_list_sum =sum(small_list)
    
        if big_list_sum > small_list_sum:
            return [big_list, small_list]
        else:
            return [small_list, big_list]
    
    # tests中的序列为两个无序列表合并后的列表
    tests = [[1,2,3,4,5,6,700,800],[10001,10000,100,90,50,1],[x for x in range(1, 11)],[12312, 12311, 232, 210,30, 29, 3, 2, 1, 1]]
    
    for l in tests:
        l.sort()
        print("Source List:	",l)
        l1,l2 = mean(l)
        print("Result List:	",l1,l2)
        print('-'*40)

    【转自】:http://blog.csdn.net/alvine008/article/details/39229057

    请各位高手指点!

  • 相关阅读:
    3.15SQL
    SQL注入
    黑盒渗透测试【转自HACK学习-FoxRoot】
    【学校作业】某项目网络安全技术解决方案
    小米手环4使用半年后的测评报告
    GKCTF赛后复盘
    RCTF赛后复盘
    【课堂笔记】常见漏洞总结
    原型链污染问题的研究
    CTF之Web常见题型总结
  • 原文地址:https://www.cnblogs.com/zhzhang/p/8566712.html
Copyright © 2011-2022 走看看