整数配列を指定し nums
、最大の和を有し、その和を返す(少なくとも1つの数を含む)の連続部分配列を見つけます。
例:
入力:[-2,1、-3,4、-1,2,1、-5,4]、 出力:6 説明:[4、-1,2,1]最大の和= 6を有します。
効果の件名:
アレイ与えられ、最大連続サブ配列を発見し、最大値を返します。
理解:
初期最大値と最大値、および一時的な値のNUMSの合計[0]。
合計<0、次の数NUMS [i]は和、NUMSの和リセット[I]よりも大きい場合場合。
場合和> 0、直接次NUMS [I]を添加する数。
常に最大の合計値と最大値の比較、更新最大値にする必要があります。
コードC ++:
クラス解決{ パブリック: INT maxSubArray(ベクトル< INT >&NUMS){ int型 N = nums.size()。 もし(N == 0)戻り 0 ; int型 maxは= NUMS [ 0 ]、和= NUMS [ 0 ]、I。 用(i = 1 ; iがn <; ++ I){
場合(合計< 0 &&和< NUMS [I]){ 合計 = NUMS [I]。 もし(最大<合計)最大= 合計。 持続する; } 和 =和+ NUMS [I]。 もし(最大<合計)最大= 合計。 } であれば(MAX <和)MAX = 和。 戻り値の最大値。 } }。
結果:
12:で実行すると
MSの
メモリ消費量:
9.4メガバイトを