[LeetCode] Maximum Product Subarray 求連續子陣列的最大乘積
宣告:原題目轉載自LeetCode,解答部分為原創
Problem :
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
.
Solution:
思路:動態規劃問題。與另一道題目“求連續子陣列的最大和”不同的是,乘法滿足“負負得正”這一規律,因此,假定f(i)為以陣列array[ ]的元素array[ i ]結尾的最大乘積,則f( i )不僅與其前一個狀態下的最大乘積f( i - 1)有關,還可能與陣列中的其他元素有關。如[-2,3,-2,4],其最大的輸出應該是48,即-2 * 3 * -2 * 4。根據觀察,我們不僅需要記錄下第 i - 1 個狀態下的連續子陣列的最大乘積last_max( 大多數情況下為正 ),還需要記錄下第 i - 1個狀態下的連續子陣列的最小乘積last_min,從而得出第 i 個狀態的連續子序列的最大乘積為
cur_max = max( max( last_max * array[ i ], last_min * array[ i ] ) , array[ i ] );
其中,cur_max相當於第 i 個狀態下的f( i ), last_max相當於第 i - 1個狀態下的f( i - 1).
程式碼如下:
class Solution {
public:
int maxProduct(vector<int>& nums) {
int last_max = nums[0];
int last_min = nums[0];
int result = nums[0];
int cur_max = nums[0];
int cur_min = nums[0];
for(int i = 1; i < nums.size(); i ++)
{
cur_max = max(nums[i], max(last_max * nums[i], last_min * nums[i]));
cur_min = min(nums[i], min(last_max * nums[i], last_min * nums[i]));
result = max(result, cur_max);
last_max = cur_max;
last_min = cur_min;
}
return result;
}
};
相關文章
- Maximum Subarray 連續子陣列最大和陣列
- Leetcode Maximum Product SubarrayLeetCode
- Leetcode-Maximum Product SubarrayLeetCode
- [leetCode][001] Maximum Product SubarrayLeetCode
- 【leetcode】53. Maximum Subarray 連續子序列的最大和LeetCode
- LeetCode | 152. Maximum Product SubarrayLeetCode
- 【演算法拾遺】子陣列的最大乘積演算法陣列
- leetcode-陣列中兩元素的最大乘積(Java)LeetCode陣列Java
- 最大子陣列問題(Maximum subarray problem)陣列
- 53_Maximum Subarray-最大子陣列陣列
- Leetcode Maximum SubarrayLeetCode
- leetcode最短無序連續子陣列LeetCode陣列
- 【Lintcode】191. Maximum Product Subarray
- Leetcode-Maximum SubarrayLeetCode
- Maximum Subarray leetcode javaLeetCodeJava
- 連續子陣列的最大和陣列
- POJ 3693 Maximum repetition substring(字尾陣列求最長重複子串)陣列
- 最短無序連續子陣列陣列
- 最大連續子陣列和的實現陣列
- 子陣列的乘積陣列
- 演算法學習-零子陣列,最大連續子陣列演算法陣列
- Leetcode 陣列中和為給定值的最長子陣列LeetCode陣列
- 【演算法拾遺】三種方法求連續子陣列的最大和演算法陣列
- LeetCode-Maximum Product of Word LengthsLeetCode
- 【劍指offer】連續子陣列的最大和陣列
- 【LeetCode動態規劃#14】子序列系列題(最長遞增子序列、最長連續遞增序列、最長重複子陣列、最長公共子序列)LeetCode動態規劃陣列
- LeetCode-Maximum Size Subarray Sum Equals kLeetCode
- [LeetCode] 2419. Longest Subarray With Maximum Bitwise ANDLeetCode
- JZ-030-連續子陣列的最大和陣列
- 牛客題霸--連續子陣列的最大和陣列
- 每日一練(22):連續子陣列的最大和陣列
- 一道題把我氣笑了:) 力扣.53 最大子陣列和 leetcode maximum-subarray力扣陣列LeetCode
- 最大連續子陣列和(最大子段和)陣列
- [LeetCode] 2841. Maximum Sum of Almost Unique SubarrayLeetCode
- 劍指 Offer 42.連續子陣列的最大和陣列
- 劍指Offer-連續子陣列中的最大和陣列
- 劍指office--31. 連續子陣列的最大和陣列
- 演算法學習-數字連續的子陣列演算法陣列