最大子序列和

算法方面一直是弱项,一直没有去锻炼过。今天看到is-Programmer上有人说到子序列和,也回顾了一下。用lua实现了复杂度为O(n)的动态规划法求最大序列和算法,支持全负序列。没啥技术含量,权当练习lua和熟悉算法了。

上代码:

 

ta = {1,-2,-3,5,2,-5,7,2,-1,2,-2}
 
function asm(t)
    local maxn,currn=t[1],1
    local left,right=1,1
 
    for i=1,#t do
        currn = currn+t[i]
        if currn > maxn then
            maxn = currn
            right = i
        else
            if currn < 0 then
                currn = 0
                left = i + 1
            end
        end
    end

    print(maxn,unpack(t,left,right))
end

-- 输出结果:
Lua 5.1.4  Copyright (C) 1994-2008 Lua.org, PUC-Rio
> 12 5 2 -5 7 2 -1 2