子向量之和最接近0?

本文探讨了如何从一个浮点数向量中找出一个子向量,使得该子向量的元素之和尽可能地接近0。通过使用累加数组cum,并对它进行排序,可以在O(nlgn)时间内找到最优解。此外,文中还提及了如何在O(n*n)时间内找到子向量的最大和。

问题:给定一个浮点数向量a[]1~n],求子向量,使其之和最接近于0。

 

解答:初始化累加数组cum[i]=a[0]+...+x[i]。如果cum[k-1]=c[u],那么子向量a[k~u]之和则接近于0。

于是问题转化为寻求符合条件的k和u。具体做法是排序cum数组,寻找相邻最小的cum[k]和cum[u],因此能够在O(nlgn)的时间内完成任务。

 

通过cum数组的应用还能够在O(n*n)的时间内解决寻找子向量最大和的问题。参考《编程珠玑》

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值