152. Maximum Product Subarray(최대 곱셈 하위 열)
4946 단어 LeetCode
제목 링크
https://leetcode.com/problems/maximum-product-subarray/description/
제목 설명
Find the contiguous subarray within an array (containing at least one number) which has the largest product.
For example, given the array
[2,3,-2,4]
, the contiguous subarray [2,3]
has the largest product = 6
. 제목 분석
이 문제에서는 음과 음의 곱셈이 플러스인 문제를 주의해야 하기 때문에 2차원수조로 곱셈의 최대치와 최소치를 기록해야 한다.만약 현재 숫자가 플러스라면 곱셈의 곱셈이 더욱 크다.반대로 곱하기 마이너스의 성적은 비교적 클 것이다.
방법: 동적 계획
알고리즘 설명
nProducts
로 마이너스 곱셈을 기록하고, pProducts
로 정곱셈을 기록한다nums
, 맞다nums[i]
:nums[i]>0:if (pProducts[i - 1] * nums[i] >= nums[i])
pProducts[i] = pProducts[i - 1] * nums[i];
else
pProducts[i] = nums[i];
if (nProducts[i - 1] * nums[i] < nums[i])
nProducts[i] = nProducts[i - 1] * nums[i];
else
nProducts[i] = nums[i];
nums[i] < 0:
if (nProducts[i - 1] * nums[i] >= nums[i])
pProducts[i] = nProducts[i - 1] * nums[i];
else
pProducts[i] = nums[i];
if (pProducts[i - 1] * nums[i] < nums[i])
nProducts[i] = pProducts[i - 1] * nums[i];
else
nProducts[i] = nums[i];
nums[i] == 0:
pProducts[i] = nProducts[i] = 0;
참조 코드
class Solution {
public:
int maxProduct(vector<int>& nums) {
vector<int> pProducts(nums.size(), 1), nProducts(nums.size(), 1);
pProducts[0] = nProducts[0] = nums[0];
int max = pProducts[0];
for (int i = 1; i < nums.size(); i++) {
if (nums[i] > 0) {
if (pProducts[i - 1] * nums[i] >= nums[i])
pProducts[i] = pProducts[i - 1] * nums[i];
else
pProducts[i] = nums[i];
if (nProducts[i - 1] * nums[i] < nums[i])
nProducts[i] = nProducts[i - 1] * nums[i];
else
nProducts[i] = nums[i];
}
else if (nums[i] < 0) {
if (nProducts[i - 1] * nums[i] >= nums[i])
pProducts[i] = nProducts[i - 1] * nums[i];
else
pProducts[i] = nums[i];
if (pProducts[i - 1] * nums[i] < nums[i])
nProducts[i] = pProducts[i - 1] * nums[i];
else
nProducts[i] = nums[i];
}
else {
pProducts[i] = nProducts[i] = 0;
}
if (pProducts[i] > max)
max = pProducts[i];
}
return max;
}
};
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
python 문자열 입력으로 모든 유효한 IP 주소 생성(LeetCode 93번 문제)이 문제의 공식 난이도는 Medium으로 좋아요 1296, 반대 505, 통과율 35.4%를 눌렀다.각 항목의 지표로 말하자면 보기에는 약간 규범에 맞는 것 같지만, 실제로도 확실히 그렇다.이 문제의 해법과 의도는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.