私は次のコードを書いて、最大合計で連続した部分配列を見つけましたが、これはかなり醜いと思います。
問題は、この問題に対する私の内部的な考え方 (DP を使用) が不可欠であることです。このコードをリファクタリングして、より機能的に (そして DRY に) するにはどうすればよいでしょうか? 関数型言語でアルゴリズムを考える方法に関する推奨事項はありますか? (たぶん、別の質問になるはずです)。
class Object
def sum(lst)
lst.reduce(:+)
end
end
def dp_max_subarray(lst)
i=0
s=0
while i<lst.length
(i...lst.length).each do |j|
t = sum lst[i..j]
if t > s
s= sum lst[i..j]
next
elsif t < 0
i=j+1
break
end
end
i+=1
end
s
end