python小算法(二)

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

有两个序列a,b,大小都为n,序列元素的值任意整形数,无序;

要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小。(华为面试)

def diff(sorted_list, length):

if not sorted_list:

return (([],[]))

last = sorted_list[-1]

big_list, small_list = diff(sorted_list[:-1],length)

big_list_sum = sum(big_list)

small_list_sum = sum(small_list)

if big_list_sum > small_list_sum:

if len(small_list) >= length:

big_list.append(last)

else:

small_list.append(last)

return ((big_list, small_list))

else:

if len(big_list) >= length:

small_list.append(last)

else:

big_list.append(last)

return ((small_list, big_list))

def deal(one, two):

for i in xrange(len(one)-1,-1,-1):

for j in xrange(len(two)-1,-1,-1):

d = abs(sum(one) - sum(two))

if 0<= one[i] - two[j] <=d:

one[i], two[j] = two[j], one[i]

return ((one, two))

a = [1,3,5,7,99,100,200]

b = [2,4,6,88,10,9,233]

length = len(a)

a.extend(b)

p = sorted(a,reverse=True)

one, two = diff(p, length)

one, two = deal(one, two)PRint one

print two

print sum(one), sum(two), sum(one) - sum(two)

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航