PS/LeetCode

Maximum Product Subarray

Hamp 2025. 1. 8. 00:34
반응형

문제

https://leetcode.com/problems/maximum-product-subarray/description/

입력

1 <= nums.length <= 2 * 10^4
-10 <= nums[i] <= 10

결과

ans: Int = 곱 부분 배열의 최댓값

해석

이전 maxSubarray는 단순 합이라, 흐름이 하나였지만

곱은 말 그대로 음수와 양수에 따른 흐름이 2개이므로 변수가 하나 더 필요했다.

그래서 음수를 고려한 최대 음수 변수와, 최대 양수 변수를 계속 가져가며 반복마다 갱신한다.

코드

class Solution {
    func maxProduct(_ nums: [Int]) -> Int {
        let n = nums.count

        if n == 1 {
            return nums[0]
        }

        var minProduct = nums[0] // 음수 최댓값
        var maxProduct = nums[0] // 양수 최댓값
        var ans = nums[0]

        for i in 1..<n {
            let now = nums[i]
            let candidate = [now, minProduct * now, maxProduct * now]
            minProduct = candidate.min()!
            maxProduct = candidate.max()!
            ans = max(ans, maxProduct)
        }
    
        return ans
    }
}

 

반응형