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

    请各位高手指点!

  • 相关阅读:
    Redis
    cz_health_day13项目实战
    cz_health_day11
    cz_health_day10
    cz_health_day09
    cz_health_day08
    MySQL8管理系列之二:从5.5升级到8的问题处理
    MySQL8管理系列之一:Mysql 8.0以后版本的安装
    MySQL 5.5.x 数据库导入到 8.0.x 服务器
    修改Mysql 8.0版本的默认数据库目录
  • 原文地址:https://www.cnblogs.com/zhzhang/p/8566712.html
Copyright © 2011-2022 走看看