53. Maximum Subarray

주어진 μ •μˆ˜ λ°°μ—΄ nums μ—μ„œ 연속적인 ν•˜μœ„ λ°°μ—΄μ˜ ν•© 쀑
κ°€μž₯ 큰 값을 κ΅¬ν•˜λ„λ‘ μž‘μ„±ν•˜λΌ.

ν•˜μœ„ 배열은 연속적인 배열이닀.

Example 1:
    Input: nums = [-2,1,-3,4,-1,2,1,-5,4]
    Output: 6
    Explanation: [4,-1,2,1] has the largest sum = 6.

Example 2:
    Input: nums = [1]
    Output: 1

Example 3:
    Input: nums = [5,4,-1,7,8]
    Output: 23


Constraints:
    1 <= nums.length <= 10^5
    -10^4 <= nums[i] <= 10^4

Solution

class Solution {
    func maxSubArray(_ nums: [Int]) -> Int {
        var nums = nums
        for index in 1..<nums.count {
            if nums[index - 1] > 0 {
                nums[index] += nums[index - 1]
            }
        }
        return nums.max() ?? 0
    }
}

μž…λ ₯κ°’μœΌλ‘œ λ“€μ–΄μ˜¨ nums λ₯Ό μ§€μ—­λ³€μˆ˜ nums 에 λ°›μ•„ μ΄ˆκΈ°ν™”ν•˜μ˜€λ‹€.

연속적인 ν•˜μœ„ λ°°μ—΄ μ€‘μ—μ„œ κ°€μž₯ 큰 값을 κ΅¬ν•˜λ©΄ 되기 λ•Œλ¬Έμ—
nums[index - 1] 이 μ–‘μˆ˜μΈμ§€ ν™•μΈν•˜λŠ” 쑰건을 μΆ”κ°€ν•˜μ˜€λ‹€.
μ–‘μˆ˜λΌλ©΄ 값을 더해 nums[index] 에 λ„£μ–΄μ€€λ‹€.

λ°˜λ³΅λ¬Έμ„ λͺ¨λ‘ 돌고 λ‚˜λ©΄ 연산이 λλ‚œ λ°°μ—΄ nums κ°€ λ˜μ—ˆμ„ 것이닀.
λ°°μ—΄μ˜ μ΅œλŒ“κ°’μ΄ λ¬Έμ œμ—μ„œ μš”κ΅¬ν•œ 값이 λœλ‹€.


πŸ“š Reference
LeetCode-53-MaximumSubarray