最大子序列和
算法方面一直是弱项,一直没有去锻炼过。今天看到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