Algorithm/LeetCode

[array] maximum product subarray

sw_develop 2025. 4. 6. 12:11

✅ Problem

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

 

 Approach & Solution

방식)

더보기

부분 배열 원소들의 최대 곱 구하기

플로우

  • 현재 위치에서의 Max, Min을 구한다.
    • subarray 이어야 하므로 연속된 값이 필요하여 현재 위치에서의 Max, Min을 따로 계산함 
    • 음수 값에 따라 결과가 달라지기 때문에 Min 값도 트래킹해야 함 (이전까지 음수였고 그 다음 값이 음수이면 곱했을 때 양수가 되는 경우)
  • for문으로 Max, Min을 업데이트한다.
  • Global Max를 구한다. (정답값)
class Solution {
    public int maxProduct(int[] nums) {
        int max = Integer.MIN_VALUE;

        int curMax = 1, curMin = 1;
        for (int n : nums) {
            int temp = curMax * n;
            curMax = Math.max(temp, Math.max(curMin * n, n));
            curMin = Math.min(temp, Math.min(curMin * n, n));

            max = Math.max(max, curMax);
        }

        return max;
    }
}