文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>100题_32 两个序列的和的差最小

100题_32 两个序列的和的差最小

时间:2011-03-21  来源:小橋流水

有两个序列a,b,大小都为n,序列元素的值任意整数,无序;
要求:通过交换a,b 中的元素,使[序列a 元素的和]与[序列b 元素的和]之间的差最小。
例如:
var a=[100,99,98,1,2, 3];
var b=[1, 2, 3, 4,5,40];

 

这个题可以用递归的思想来解决:

首先将这两个数组合成一个数组,并按从小到大的顺序排序,取出最大的和次大的。将剩余的2n-2个元素递归分成两个和的差最小的两部分。这样和比较小的加上最大的那个元素和和比较大的加上次大的元素将是整个序列的最小和差划分,可以用数学归纳法来证明。

 

代码如下(Python):

def mean(sorted_list, list_b = []):
if list_b:
sorted_list.extend(list_b)
sorted_list.sort()

if not sorted_list:
return ([], [])

big_list,small_list = mean(sorted_list[:-2])

big_list.append(sorted_list[-2])
small_list.append(sorted_list[-1])

if sum(big_list) > sum(small_list):
return (big_list, small_list)
else:
return (small_list, big_list)

def main():
a = [100, 98, 99, 1, 2, 3]
b = [1, 2, 3, 4, 5, 40]
big, small = mean(a, b)
print(big)
print(small)

if __name__ == '__main__':
main()
相关阅读 更多 +
排行榜 更多 +
找茬脑洞的世界安卓版

找茬脑洞的世界安卓版

休闲益智 下载
滑板英雄跑酷2手游

滑板英雄跑酷2手游

休闲益智 下载
披萨对对看下载

披萨对对看下载

休闲益智 下载