社区
数据结构与算法
帖子详情
一个小算法问题
BaiYunfeng
2004-06-07 11:19:59
有N个数,数字大小范围在-2^32—2^32之内,从他们之中连续取出M个数并相加(L1<=M<=L2),(1<=L1<=L2<=N),请问可以得到的数字的最大的和是多少?
请问这个题的O(N)算法是什么啊?
...全文
315
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)的.
从
一个
问题
的多个
算法
看
算法
的优化
本文通过
一个
具体
问题
探讨了
算法
设计与优化的过程,从暴力穷举到宏观视角,逐步降低
算法
复杂度,最终达到高效解决
问题
的目的。
【
算法
思想·数组】
一个
方法团灭nSum
问题
本文由浅入深介绍用
一个
函数解决所有 nSum 类型
问题
。先讲解 twoSum
问题
的
算法
思路,包括基本思路及避免结果重复的方法;接着阐述 3Sum、4Sum
问题
的解法,通过穷举和复用函数解决;最后提出可统一出 nSum 函数,还提醒调用前先对数组排序。
字典序
算法
与下
一个
排列
问题
算法
推导
本文介绍了字典序的基础概念及其在计算机领域的应用,并详细探讨了字典序
算法
在求解全排列及下
一个
排列
问题
中的实现方法。
一个
背包
算法
问题
博客围绕
一个
算法
试题展开,该试题要求在双核CPU上调度n个任务,使总运行时间最小。经分析,
问题
可转化为典型的背包
问题
,背包容量为所有任务总运行时间的一半,可通过通用的动态规划
算法
求解,且计算时可优化为一维。
一个
算法
正确性的
问题
本文通过
一个
简单的
算法
示例探讨了输入数据对
算法
正确性的影响。特别关注了当所有输入数据都为负数时
算法
可能存在的
问题
,并强调了在设计
算法
时必须充分考虑各种可能的输入情况。
数据结构与算法
33,025
社区成员
35,336
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章