2016-09-19 15 views
0

配列が{-1 3 -1 9 4 -4}の場合。Javaで最大配列合計を持つサブアレイを見つける方法は?

"合計は15で、配列は{3 -1 9 4}です。

私は合計のコードを持っていますが、このサブアレイを取得するにはどうすればいいですか?ここ

あなたは合計を持っている場合、それはあなたのコードは、それがそのポイントに持っている最大の価値を知っている、あなたのコードの中でいくつかの点で意味合計

int maxSum = 0, thisSum = 0; 
    for(int j = 0; j < a.length; j++){ 
     thisSum += a[ j ]; 
     if(thisSum > maxSum){ 
      maxSum = thisSum; 
     } 
     else if(thisSum < 0) 
      thisSum = 0; 
    } 
    System.out.println(maxSum); 
+0

[こちら](http://www.programcreek.com/2013/02/leetcode-maximum-subarray-java/)をご覧ください。 – DimaSan

+0

'maxSum'(および場合によっては' maxEnd')を更新するときに 'maxStart'(' j'に基づいて)を保持します。 –

+0

@DimaSanだけで最大の合計を返します –

答えて

1

fromとtoが0で合計がゼロの場合は、空のサブアレイがあることを意味する可能性があります(すべてがネガティブです)。

int []a = {-1, 3, -1, 9, 4, -4}; 

    int from=0, to=0; 

    int maxSum = 0, thisSum = 0, thisFrom = 0 ; 
    for(int j = 0; j < a.length; j++){ 

     if (thisSum == 0){ thisFrom = j ; } 

     thisSum += a[ j ]; 
     if(thisSum > maxSum){ 
      from = thisFrom; 
      to = j; 
      maxSum = thisSum; 
     } 
     else if(thisSum < 0) 
      thisSum = 0; 
    } 
    System.out.println(Arrays.toString(Arrays.copyOfRange(a, from, to+1))); 
    System.out.println(maxSum); 
+0

でも魅力的に働いていました。ありがとうございました。 –

0

ためのコードです。なぜあなたは、各合計の文字列内のシーケンスを保存し、最大の合計を持つたびに文字列を次のシーケンスに置き換えていないし、合計値がすでにあなたのmaxSum変数に入っているシーケンスを持つことになります。

関連する問題