Leetcode Java Maximum Product Subarray
업데이트:
문제
코드
class Solution {
public int maxProduct(int[] nums) {
int max = nums[0];
int length = nums.length;
int left = 1;
int right = 1;
for (int idx = 0; idx < length; idx++) {
left = (left == 0 ? 1 : left) * nums[idx];
right = (right == 0 ? 1 : right) * nums[length - 1 - idx];
max = Math.max(max, Math.max(left, right));
}
return max;
}
}
결과
설명
-
주어진 정수 배열 nums의 부분 집합의 곱이 최대인 값을 구하는 문제이다.
- 문제 풀이에 필요한 변수를 정의한다.
- nums는 부분 집합의 곱이 최대인 값을 저장하기 위한 변수이다.
- length는 nums의 길이를 저장하는 변수이다.
- left는 left-right로 이동하며 곱한 값을 저장하기 위한 변수이다.
- right는 right-left로 이동하며 곱한 값을 저장하기 위한 변수이다.
- 배열 nums를 반복하여 부분 집합의 곱이 최대인 값을 구한다.
- left가 0인 경우 1과, 그렇지 않은 경우 left와 nums[idx]값의 곱을 다시 left에 넣어준다.
- right가 0인 경우 1과, 그렇지 않은 경우 left와 nums[$length - 1 - idx$]값의 곱을 다시 right에 넣어준다.
- 각 left와 right가 0인 경우 nums[$idx - 1$]값 혹은 nums[$length - 1 - idx - 1$]값이 0이어서 곱의 결과가 0으로 저장된 경우이므로, 다음 계산을 위해 1로 변환하는 것이다.
- max를 left, right, max 중 가장 큰 값으로 넣어준다.
- 반복이 종료되면 부분 집합의 곱이 최대인 값을 저장한 max를 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기