LeetCode 解答 #53. Maximum Subarray プログラミング練習

問題:
f:id:stlisacity:20180804113954p:plain
難易度: easy
入力: int[]
目的: 入力されたArrayの中で和が最も大きなSubArrayを求めよ
出力: int

求めるのはSubArrayなので、入力の中で連続な数字の和を計算していきます。
値が小さくなると言うことは、前の累計がマイナスだったと言うことなので、
そこで分岐すれば行けるはずです。

注意すべき事: 

  • maxの値を求めるだけなのでsubArrayを記録する必要はない

以下回答です。

class Solution {
    public int maxSubArray(int[] nums) {
        int len = nums.length;
        int sum = 0;
        int max = Integer.MIN_VALUE;
        for(int i=0; i<len; i++) {
            sum += nums[i];
            if (sum > max) {
                max = sum;
            }
            if (sum < 0) {
                sum = 0;
            }
        }
        return max;
    }
}

forで行列の中を頭から足していき、最大値が更新された場合maxに記録。
累計が0以上であれば続け、マイナスだった場合は破棄して繰り返します。

今日は以上。
よいプログラミング生活を!