求解!!! 看到一道算法题,总感觉自己的解法有问题。若有正解请指点,感激不尽。

题目如下:
有两个序列a,b,大小都为n,序列元素的值任意整形数,无序;
要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小。

以下两个序列为例:

list1 = [2,5,7,12,6,24,14,6,7,35]
list2 = [4,5,22,13,6,8,4,17,33,9]
#第一步:将列表合并并排序
list_all = list1 + list2        #[2,5,7,12,6,24,14,6,7,35,4,5,22,13,6,8,4,17,33,9]
list_all = list_all.sort()      #[2,4,4,5,5,6,6,6,7,7,8,9,12,13,14,17,22,24,33,35]

#第二步:取出最大值与最小值
最大值:max_value = list_all[-1]
最小值:mix_value = list_all[0]
list_all.remove(max_value)
list_all.remove(mix_value)
list_all = [4,4,5,5,6,6,6,7,7,8,9,12,13,14,17,22,24,33]

#第三步:分成两组,等差为2进行分组,保证相邻的元素在不同的分组
list_new1 = list_all[::2]    #[2, 4, 5, 6, 7, 8, 12, 14, 22, 33]

for i in list_new1:          #list_all去掉list_new1的元素,就是list_new2
    list_all.remove(i)
list_new2 = list_all         #[4, 5, 6, 6, 7, 9, 13, 17, 24, 35]

#list_new1从索引0开始取,所以值较小,将最大值 max_value加入
list_new1.append(max_value)
#反之list_new2值较大,所以将mix_value加入
list_new2.append(mix_value)

sum(list_new1) - sum(list_new2)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值