代码改变世界

华为面试题解(2)

2013-06-15 18:57  张三~  阅读(233)  评论(0编辑  收藏  举报

大概是3年前,我正是大一, 写下了这篇 http://www.cnblogs.com/zhangsan/archive/2010/06/28/1767000.html 文章

但解法是错误的, 一直没来填这个坑.

做不久在做checkio, 正好遇到这道题目, 想起此事, 变过来贴一下正确解法.

下面是我的解法, 如果有不对地方, 欢迎指出.

 

 1 def checkio(data):
 2     sorted_list = sorted(data,reverse=True)
 3     sum_l       = sum(sorted_list)
 4     half_sum    = sum_l/2
 5     def get_close(alist,n):
 6         for index,number in enumerate(alist):
 7             if number <= n:
 8                 yield number + max(get_close(alist[index+1:],n-number))
 9         yield 0
10 
11     max_half    = max(get_close(sorted_list,half_sum))
12     return sum_l-2*max_half