この問題への入力は、A[1...n]
実数の配列です。A[i],A[i+1],...A[j]
の連続する部分列のすべての数値を合計して得られる最高値を調べる必要がありますA
。A
に負の数が含まれていない場合、問題は自明であり、 のすべての要素を合計することで解決できますA
。A
ただし、正の数と負の数が混在している場合は、よりトリッキーになります。
たとえば、 の場合A = [-2,11,-4,13,-5,-3]
、解は20
(11-4+13=20)です。の場合A = [-2,1,-3,4,-1,2,1,-5,4]
、解は6
(4-1+2+1=6)です。空の部分列の数の合計は です0
。
O(n^3)でこの問題を解決する力ずくのソリューションが存在しますが、問題を線形時間で解決することも可能です。
- 上記の問題を線形時間で解くアルゴリズムを設計します。アルゴリズムを疑似コードで提示します。
- アルゴリズムがどのように、またなぜ機能するのかを簡単に説明してください。
- アルゴリズムが実際に線形時間で実行される理由を簡単に説明してください。