[Leetcode] 53. Maximum Subarray


問題のショートカット
Time Complexity: O(n)
Space Complexity: O(1)
class Solution:
    def maxSubArray(self, nums: List[int]) -> int:
        maxSubSum = subSumSoFar = nums[0]
        
        for i in range(1, len(nums)):
            # Initialize if the previous subsum is negative
            if subSumSoFar < 0:
                subSumSoFar = 0
            subSumSoFar += nums[i]
            
            if maxSubSum < subSumSoFar:
            	maxSubSum = subSumSoFar
        
        return maxSubSum

Kadane's Algorithm


各最大部分と前の最大部分の和の結果を利用します.
配列の各インデックスには、自分の値と以前の最大部分とでより大きな値を選択するだけで最大のローカル値があります.つまり、前のインデックスの最大部分と負の値がある場合は、自分の値を選択できます.このプロセスにより,最終的には各インデックスで得られる最大部分の配列が得られる.

最大値は、すべての部分との最大値です.
リファレンス
Kadane's Algorithm - ブログ