求一串数的最大子段和是一个经典问题,解决这个问题存在O(N^3),O(N^2),O(NlogN),O(N)算法。
把O(N)的算法记录如下:
这是解决此问题的完美算法。 其中思想也极为简单,即遇到数先加,如果当前和大于之前的最大值,就修改最大值,如果加上之后当前值小于了0,那么当前值为0。
- int maxSubSum(const vector<int>&a)
- {
- int maxsum=0;
- int thissum=0;
- for(unsigned int j=0;j<a.size();j++)
- {
- thissum+=a[j];
- if (thissum>maxsum)
- {
- maxsum=thissum;
- }else if (thissum<0)
- {
- thissum=0;
- }
- }
- return maxsum;
- }
记录一个算法
原创
©著作权归作者所有:来自51CTO博客作者wenix的原创作品,请联系作者获取转载授权,否则将追究法律责任
下一篇:写给毕业后的自己
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
记录一个ThreadPool插件
之前在项目中需要多线程抓取一些数据,一开始的时候使用了.net自带的ThreadPool。但是后来发现一些问题,主要是ThreadPool.SetMax方法返回false问题。导致设置无效,然后所有的任务全部自动启动了,导致被对方服务器怀疑是镜像工具,
ThreadPool DedicatedThreadPool 封装 .net github