描述:
有两个无序整数列表a和b,要求实现一个大挪移心法,通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小。
说明:
1、用例中,a和b都是非空的整数列表,且a和b的长度相同;
#!/usr/bin/python -*- coding: utf-8 -*-
import itertools
class Demo:
def demo(self, list1, list2):
c = list1 + list2
list1 = min(itertools.combinations(c, len(c)/2), key=lambda x:abs(sum(x)-sum(c)/2))
list2 = c
for i in list1:
list2.remove(i)
return list1, list2
var = Demo();
a = [20,26,38,40]
b = [58,60,78,80]
a,b = var.demo(a,b)
print a
print b
//------------------------------------------------------------------------------------------------------------------------------------------//
list1 = min(itertools.combinations(c, len(c)/2), key=lambda x:abs(sum(x)-sum(c)/2))
itertools.combinations(c,len(c)/2):利用迭代器,将 链表c 按照链表长度的一半获取所有子串
利用min(...,key)的lambda表达式取子串所有值的和与 c 的所有值和的一半之间的差值,取差值最小的子串