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

    请各位高手指点!

  • 相关阅读:
    递归
    HDU_oj_2041 超级楼梯
    树与森林——树与森林的遍历
    HUD_oj_2040 亲和数
    HDU_oj_2039 判定三角形
    HDU_oj_2037 今年暑假不AC
    多边形面积
    HDU_oj_2036 改革春风吹满地(多边形面积)
    【转发】【composer】composer 命令行介绍
    【chm】【windows】win7下chm打开不显示内容
  • 原文地址:https://www.cnblogs.com/zhzhang/p/8566712.html
Copyright © 2011-2022 走看看