社区
数据结构与算法
帖子详情
一个小算法问题
BaiYunfeng
2004-06-07 11:19:59
有N个数,数字大小范围在-2^32—2^32之内,从他们之中连续取出M个数并相加(L1<=M<=L2),(1<=L1<=L2<=N),请问可以得到的数字的最大的和是多少?
请问这个题的O(N)算法是什么啊?
...全文
233
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++
算法
大全 PDF
C++ 经典
算法
大全。内容详细,
算法
经典。很值得一看。
算法
技术手册 - 中文版
《
算法
技术手册》内容简介:开发健壮的软件需要高效的
算法
,然后程序员们往往直至
问题
发生之时,才会去求助于
算法
。《
算法
技术手册》讲解了许多现有的
算法
,可用于解决各种
问题
。通过阅读它,可以使您学会如何选择和实现正确的
算法
,来达成自己的目标。另外,书中的数学深浅适中,足够使您可以了解并分析
算法
的性能。 较之理论而言,《
算法
技术手册》更专注于应用。《
算法
技术手册》提供了高效的代码解决方案,使用多种语言进行编写,让您可以轻松地将其应用于特定的工程当中。通过《
算法
技术手册》,您可以: · 解决特定代码的
问题
,或者提升既有解决方案的性能 · 快速找到与您所解决的
问题
相关的
算法
,并决定哪个
算法
才是最适合的那
一个
· 探索使用C、C++、Java以及Ruby实现的
算法
解决方案以及开发小贴士 · 了解
算法
预期的性能,以及它达到最高性能时所需要的条件 · 发现不同
算法
之间相似的设计哲学 · 学习高级数据结构,来提升
算法
的性能 通过《
算法
技术手册》,您能学到如何提升
算法
的性能,这将是您的软件应用程序走向成功的关键。
ACM超级经典
算法
大集合
ACM超级经典
算法
大集合。大家都知道acm大赛对计算机专业的大学生说是很有用的
SMO
算法
实现 java代码
我的博客上有详细解说这个
算法
的实现,用java代码实现,以及每个公式的解说。网址:http://blog.csdn.net/techq/archive/2011/02/01/6171688.aspx
MoreWindows白话经典
算法
之七大排序第2版(高清)
在第一版的基础上新加了对冒泡排序,直接插入排序,直接选择排序,希尔排序,归并排序,快速排序和堆排序这七种常用的排序方法的总结篇,方便大家复习,合适作为笔试面试前的复习资料。
数据结构与算法
33,028
社区成员
35,336
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章