今日では、私の人生は問題解決の少しchaotic.Theの進展が鈍化しています。私は積極的に将来的には私の状態を調整し、毎日完了しなければならないタスクを完了することを願って
整数配列を指定し nums
、最大の和を有し、その和を返す(少なくとも1つの数を含む)の連続部分配列を見つけます。
例:
入力:[-2,1、-3,4、-1,2,1、-5,4]、 出力:6 説明:[4、-1,2,1]最大の和= 6を有します。
ファローアップ:
あなたはO(考え出した場合はn個)のソリューションを、より微妙である、除算を使用して、別のソリューションをコーディングしようとするアプローチを征服します。
このprobemは簡単で、私はDPについてのクラスの話を聞いた後、私はまだ答えを見つけ出すことはできませんダイナミックprogram.Butに属します。
私の現段階では、唯一の問題とのより多くの接触を行うことによって、私は最終的に自分で問題を解決する能力を養うことができます。そのため、戦いの形成は、「迅速かつ迅速に」ではなく「長引く」でなければなりません。
BONUS:
1.vectorはスペースのサイズを初期化します
ベクター< INT > F(nums.size())。
2.vector max値は、max_elementの前に*を追加することを忘れないでください、関数を呼び出すことができ、値の型が異なっています
* max_element(f.begin()、f.end())
完全なコードC ++:
する#include <stdio.hに> する#include <iostreamの> する#include < ストリング > の#include <ベクトル> の#include < 設定 > の#include <地図> の#include <アルゴリズム> 使用して 名前空間STD。 // 著者:Huahua // ランタイム:3ミリ秒 クラスソリューション{ パブリック: INT maxSubArray(ベクトル< INT >&NUMS){ ベクトル < INT > F(nums.size())。 F [ 0 ] = NUMS [ 0]; 以下のために(int型 i = 1 ; i)は(nums.sizeを<; iは++ ) { F [I] = MAX(F [I- 1 ] + NUMS [i]は、NUMS [I])。 } 戻り *のmax_element(f.begin()、f.end())。 } }。 INT メイン() { 溶液S。 ベクター < INT > NUMS = { - 2、1、 - 3、4、 - 1、2、1、 - 5、4 }。 int型RES = s.maxSubArray(NUMS)。 coutの << RES << てendl; リターン 0 ; }
Pythonのバージョン:
ARR =入力("" ) NUMS [INT(N)= ための N における(arr.split " " )] プリント(NUMS) #1 NUMS = [ - 2,1、-3,4、-1,2,1 、-5,4]
すべてのpython入力はanything.Numsは、forループによって割り当て値にすることができ書く必要はありませんが、配列のスペースで分割されarray.if入力を分割する「」文字列なので、直接入力され、it.Useを扱います。
完全なコードPythonのバージョン:
注意:最小値のセットが-2147483647を使用する必要があり、これは、int型の最小値であり、
クラス溶液(オブジェクト): DEF maxSubArray(自己、NUMS): "" " :タイプNUMS:リスト[INT] :RTYPE:INT """ #ローカルから> L、global-> Gの L = G = -2147483647 のための私でNUMS: L = MAX(I、L + I) G = MAX(G、L) リターングラム ソル = ソリューション() ARR =入力("" ) NUMS = INT(N)用のn における arr.split(" 、" )] 印刷 (NUMS) #1 NUMS = [ - 2,1、-3,4、-1,2,1、-5,4] プリント(solu.maxSubArray(NUMS))
Theroy:
変数Lはローカル、gはグローバル手段、NUMSの各変数は、上記および現在の要素大きい一方がローカル最大であり、世界最大であるとローカルマックス&グローバル最大、大きなものを比較の合計を比較します。