社区
数据结构与算法
帖子详情
一个小算法问题
BaiYunfeng
2004-06-07 11:19:59
有N个数,数字大小范围在-2^32—2^32之内,从他们之中连续取出M个数并相加(L1<=M<=L2),(1<=L1<=L2<=N),请问可以得到的数字的最大的和是多少?
请问这个题的O(N)算法是什么啊?
...全文
236
13
打赏
收藏
一个小算法问题
有N个数,数字大小范围在-2^32—2^32之内,从他们之中连续取出M个数并相加(L1<=M<=L2),(1<=L1<=L2<=N),请问可以得到的数字的最大的和是多少? 请问这个题的O(N)算法是什么啊?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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)的.
算法
技术手册 - 中文版
· 快速找到与您所解决的
问题
相关的
算法
,并决定哪个
算法
才是最适合的那
一个
· 探索使用C、C++、Java以及Ruby实现的
算法
解决方案以及开发小贴士 · 了解
算法
预期的性能,以及它达到最高性能时所需要的条件 ...
ACM超级经典
算法
大集合
总之,《ACM超级经典
算法
大集合》是学习和掌握
算法
的重要资料,无论是为了比赛还是提升自身编程技能,都应该充分利用这份资源,深入理解每一种
算法
的原理,熟练掌握其应用,并通过不断练习提高解决
问题
的能力。
c语言常用
算法
集
在编程领域,C语言因其高效、灵活和广泛的应用性而备受推崇。特别是在
算法
设计与实现上,C语言凭借其低级特性和接近硬件的优势,成为了许多...对于想要提高自己
算法
水平的C语言爱好者来说,这是
一个
非常有价值的资源。
SMO
算法
实现 java代码
在Java环境中实现SVM和SMO
算法
,通常会使用一些现有的库,比如"JSvmLib"可能就是
一个
这样的库。这类库提供了一套完整的工具,包括训练、预测和模型评估等功能,简化了开发者的工作。在实际应用中,开发者可以利用...
十三个经典
算法
研究PDF文档[带目录+标签]
《十三个经典
算法
研究》是一份详尽的PDF文档,主要涵盖了计算机科学中最为重要的
算法
。这份资料的独特之处在于它不仅包含了十三个经典的
算法
解析,还整合了红黑树这一重要数据结构的深入研究,同时提供了清晰的目录...
数据结构与算法
33,027
社区成员
35,336
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章