社区
数据结构与算法
帖子详情
一个小算法问题
BaiYunfeng
2004-06-07 11:19:59
有N个数,数字大小范围在-2^32—2^32之内,从他们之中连续取出M个数并相加(L1<=M<=L2),(1<=L1<=L2<=N),请问可以得到的数字的最大的和是多少?
请问这个题的O(N)算法是什么啊?
...全文
224
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)的.
算法
1.
算法
定义 ...如果
一个
算法
有缺陷,或不适合于某个
问题
,执行这个
算法
将不会解决这个
问题
。不同的
算法
可能用不同的时间、空间或效率来完成同样的任务。
一个
算法
的优劣可以用空间复杂度与时间复杂度来衡量。
优化
算法
——模拟退火
算法
最后的结果模拟退火
算法
原理爬山法是一种贪婪的方法,对于
一个
优化
问题
,其大致图像(图像地址)如下图所示: 其目标是要找到函数的最大值,若初始化时,初始点的位置在CC处,则会寻找到附近的局部最大值AA点处,...
如何使用
算法
解决
问题
文章目录如何使用
算法
解决
问题
算法
解决
问题
思路调度的
问题
投资
问题
...这里举
一个
例子: 调度的
问题
从这
问题
中,通过直觉感觉到耗时少的放到前面可以达到最优,这样是一种贪心的策略 然后,我们可以找到规律,...
利用遗传
算法
求解TSP
问题
旅行商
问题
是图论中的
一个
著名
问题
。 假设有
一个
旅行商人要拜访N个城市,要求他从
一个
城市出发,每个城市最多拜访一次,最后要回到出发的城市,保证所选择的路径长度最短。 二、
算法
描述 (一)
算法
简介 遗传...
背包
问题
贪心
算法
求解
有
一个
背包,背包容量是M=150。有7个物品,物品可以分割成任意大小。 要求尽可能让装入背包中的物品总价值最大,但不能超过总容量。 思路 具有最优子结构性质和贪心选择性质。只要是所有物品的总重量大于背包容纳量...
数据结构与算法
33,008
社区成员
35,326
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章