题目如下:
有两个序列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)