社区
数据结构与算法
帖子详情
一个小算法问题
BaiYunfeng
2004-06-07 11:19:59
有N个数,数字大小范围在-2^32—2^32之内,从他们之中连续取出M个数并相加(L1<=M<=L2),(1<=L1<=L2<=N),请问可以得到的数字的最大的和是多少?
请问这个题的O(N)算法是什么啊?
...全文
282
13
打赏
收藏
一个小算法问题
有N个数,数字大小范围在-2^32—2^32之内,从他们之中连续取出M个数并相加(L1<=M<=L2),(1<=L1<=L2<=N),请问可以得到的数字的最大的和是多少? 请问这个题的O(N)算法是什么啊?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
javacomte
2004-06-14
打赏
举报
回复
将所有正数相加不就可以了
WYlslrt
2004-06-12
打赏
举报
回复
直接扫描一遍绝对能出来结果.
BaiYunfeng
2004-06-09
打赏
举报
回复
怎么肯定是N呢?那我们假设L2-L1也不是常数,能否给出一个比O(log(L2-L1)*N)更优的算法,谢谢。
BinaryTreeEx
2004-06-09
打赏
举报
回复
复杂度肯定是N
dengsf
2004-06-09
打赏
举报
回复
我觉得 L2-L1 相关的因子不能去掉,顶多只是优化。对于 N 不大的情况,应该问题不算太大的~
但有趣的是,当 L1=1, L2=N 的时候,前面的 L2-L1 反而可以去掉……
楼主如果找到好方法,请分享一下。
junnyfeng
2004-06-08
打赏
举报
回复
M虽然是有范围,但每次进行程序时必定是给定的,或程序中给定或手工输入
然后再进行一楼给的算法就可以
BaiYunfeng
2004-06-08
打赏
举报
回复
M只能在L1到L2的范围内取,请看清题,你那个算法只适用于对M没有限制的时候。
BaiYunfeng
2004-06-08
打赏
举报
回复
M是没有定的,谢谢。
canjian
2004-06-08
打赏
举报
回复
同意楼上!
BaiYunfeng
2004-06-08
打赏
举报
回复
但是这样做的话,L2-L1=N-1时,算法好慢啊。我知道一个用堆优化的O(log(L2-L1)*N)的算法。但是能不能把(L2-L1)去掉,或者说换成一个(简单描述),N=10^8, L2-L1=5*10^7时,可以瞬间出解的算法啊?谢谢。
dengsf
2004-06-08
打赏
举报
回复
题目的意思是 M 是在一定范围内变化,而不是固定的。
我有个大概思路,但没有优化, 仅供参考:
// 数组下标以 1 开始
1 设输入数组为a[n],计算出S(n)(from 1 to n),其中S(n)为前n项的和 ---- O(n)
2 初始化一些变量:
curMax = s[1]; //记录目前所找到的最大值 ----- O(1)
/*
求最大值,其实等价于求 si - sj 的最大值,其中 j>=1, j+L1<= i <= j+L2
*/
3 for( int i=2 to n ){
从 S[i-L2, i-L1] 中选出最小的值 min; -----O( L2-L1 )
S[i] - min > curMax ? curMax = S[i]-min : do-nothing;
}
--- O( (L2-L1)*n )
所以总的复杂度为 O( (L2-L1)*n ).
但对于给定的 L2,L1, L2-L1 为常数,故复杂度为 O(n).
----------
这方法是从 M 没有限制的情况下扩展出来的~
这只是最基本的思路,还可以进行大幅度的优化,比如1 跟 2,3 同时进行。 求最小值也可以通过一些方法来简化。但对于 L2,L1 固定的情况来说,这些方法只能减少常数因子。
BaiYunfeng
2004-06-08
打赏
举报
回复
运行时当然是给出L1和L2,不会给定M
LeeMaRS
2004-06-08
打赏
举报
回复
...那不就是扫描一遍咯...
先求出从1开始的连续M个数之和sum, 与当前最优解比较, 取较优值.
然后往后移一位, 即将sum加上第M+1个数, 减去第1个数, 得到从2开始的连续M个数之和sum, 与当前最优解比较, 取较优值...
这样扫描一遍, 复杂度是O(N)的.
JAVA近百种
算法
大全
最近找到的JAVA近百种
算法
大全 分享一下 java
算法
大全,有近100多种常见
算法
的源代码,是学习JAVA
算法
的难得资料,需要的童鞋来下载吧!
ACM超级经典
算法
大集合
ACM超级经典
算法
大集合。大家都知道acm大赛对计算机专业的大学生说是很有用的
c语言常用
算法
集
几个不错的c语言
算法
SMO
算法
实现 java代码
我的博客上有详细解说这个
算法
的实现,用java代码实现,以及每个公式的解说。网址:http://blog.csdn.net/techq/archive/2011/02/01/6171688.aspx
粒子群
算法
求解约束多目标优化万能matlab代码
粒子群
算法
约束多目标 优化 matlab代码
数据结构与算法
33,028
社区成员
35,337
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章