给定一个浮点数组A, 求其中连续子串中最大和。
首先引入一个前缀和数组S, S[i]=Sum{A[0..i]}, 则可以用一个 N^2算法求出最大连续和,即罗列出所有的可能连续字串。
这个问题事实上有线性时间解法,记录max为以A[i]结尾的最大连续和,那么
java 代码
- for (i=0; i<n; i++)
- max[i]=max{0,max[i-1]+a[i]}
演化问题:
求最接近一个值V的连续和。基本上沿用N^2算法,但对内部循环使用一个优先队列,复杂度降到NlogN.