[LeetCode] 152. Maximum Product Subarray

2021. 7. 7. 21:15·알고리즘 문제풀이/LeetCode
728x90

문제

배열 문제이다.

53번은 합을 구하는 문제이고, 이 문제는 곱을 구하는 문제이다. (53번 설명 참조)

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

 

Maximum Product Subarray - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

 

풀이

이 문제는 생각하기 조금 어려웠던 것 같다. 53문제 풀이를 참고하여 해결하려고 했는데, 조금 다른 문제였다.

 

비슷하게 product 변수에 첫 번째 원소부터 하나씩 곱해나간다.

 

처음으로 음수를 만나게 되면, 그 수까지 곱한 product를 따로 저장해놓는다.

(그다음수를 곱한 결과가 음수라면 값이 점점 작아지기 때문에 product에서 위에 따로 저장한 값을 나누어 준다.)

 

만약 0을 만나게 되면 product를 다시 1로 초기화하고, 계속 진행한다.

최댓값이 0보다 작다면 0으로 저장해 준다.

처음으로 음수를 만나 저장하는 것도 다시 진행한다.

(부분 배열 사이에 0이 있는 경우를 셀 필요 없음. 어차피 곱이 0이기 때문에)

 

코드

public int maxProduct(int[] nums) {
        int max = nums[0];
        int product = 1, firstNegative = 1;

        for (int i = 0; i < nums.length; i++) {
            if (nums[i] == 0) {
                firstNegative = 1;
                product = 1;
                if (max < 0)
                    max = 0;
            } else {
                product *= nums[i];
                if (product < 0)
                    max = Math.max(product / firstNegative, max);
                else
                    max = Math.max(product, max);
                if (firstNegative == 1 && nums[i] < 0)
                    firstNegative = product;
            }
        }

        return max;
    }
728x90

'알고리즘 문제풀이 > LeetCode' 카테고리의 다른 글

[LeetCode] 53. Maximum Subarray  (0) 2021.07.07
[LeetCode] 102. Binary Tree Level Order Traversal  (0) 2021.07.06
[LeetCode] 226. Invert Binary Tree  (0) 2021.07.05
[LeetCode] 100. Same Tree  (0) 2021.07.05
[LeetCode] 104. Maximum Depth of Binary Tree  (0) 2021.07.04
'알고리즘 문제풀이/LeetCode' 카테고리의 다른 글
  • [LeetCode] 53. Maximum Subarray
  • [LeetCode] 102. Binary Tree Level Order Traversal
  • [LeetCode] 226. Invert Binary Tree
  • [LeetCode] 100. Same Tree
kiminae
kiminae
공부한 내용을 정리합니다.
  • kiminae
    데이터 다루는 사람
    kiminae
  • 전체
    오늘
    어제
    • 분류 전체보기 (67)
      • AI & 빅데이터 (6)
        • kafka (10)
        • [Book] 빅데이터를 지탱하는 기술 (12)
      • 알고리즘 (19)
      • 알고리즘 문제풀이 (13)
        • programmers (0)
        • 백준 (1)
        • LeetCode (12)
      • Android (3)
      • Book&Lesson (13)
        • [Lesson] 프로그래머스 커뮤러닝 (Pyth.. (1)
      • 참고한 글들 (1)
      • 컨퍼런스 정리 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    ViewModel
    알고리즘
    시간복잡도
    알고리즘문제
    추천알고리즘
    MPP데이터베이스
    정렬알고리즘
    리트코드
    카프카
    DP문제
    버블정렬
    파이프라인구축
    hadoop
    mvvm
    Algorithm
    Kafka
    카프카클라이언트
    알고리즘풀이
    릿코드
    데이터엔지니어
    트리
    빅데이터
    머신러닝
    sort
    leetcode
    개인화추천
    BI도구
    데이터시각화
    정렬
    빅데이터를지탱하는기술
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
kiminae
[LeetCode] 152. Maximum Product Subarray
상단으로

티스토리툴바