leetcode-152 Maximum Product Subarray
2015-05-14 14:49
399 查看
对于Product Subarray,要考虑到一种特殊情况,即负数和负数相乘:如果前面得到一个较小的负数,和后面一个较大的负数相乘,得到的反而是一个较大的数,如{2,-3,-7},所以,我们在处理乘法的时候,除了需要维护一个局部最大值,同时还要维护一个局部最小值,由此,可以写出如下的转移方程式:
max_copy[i] = max_local[i]
max_local[i + 1] = Max(Max(max_local[i] * A[i], A[i]), min_local * A[i])
min_local[i + 1] = Min(Min(max_copy[i] * A[i], A[i]), min_local * A[i])
max_local[i + 1]表示已下标i+1结尾的连续字数组的最大乘积
max_copy[i] = max_local[i]
max_local[i + 1] = Max(Max(max_local[i] * A[i], A[i]), min_local * A[i])
min_local[i + 1] = Min(Min(max_copy[i] * A[i], A[i]), min_local * A[i])
max_local[i + 1]表示已下标i+1结尾的连续字数组的最大乘积
<span style="font-family:Microsoft YaHei;font-size:14px;">class Solution { public: int maxProduct(vector<int>& nums) { int len = nums.size(); if(len == 0) return -1; int res = nums[0]; int dpmax = nums[0] , dpmin = nums[0]; for(int i = 1; i < len; i++){ int tmpmax = max(max(dpmax * nums[i],nums[i]),dpmin * nums[i]); dpmin = min(dpmax * nums[i],min(dpmin * nums[i],nums[i])); dpmax = tmpmax; if(dpmax > res) res = dpmax; } return res; } };</span>
相关文章推荐
- Leetcode152——Maximum Product Subarray
- LeetCode(152) Maximum Product Subarray
- leetcode 152 Maximum Product Subarray
- [LeetCode152]Maximum Product Subarray
- [LeetCode]题解(python):152-Maximum Product Subarray
- 【leetcode】Array—— Maximum Product Subarray(152)
- 【LeetCode 152】Maximum Product Subarray
- LeetCode---(152)Maximum Product Subarray
- [leetcode] 152 Maximum Product Subarray
- leetcode 152: Maximum Product Subarray
- LeetCode(152) Maximum Product Subarray
- leetcode 152: Maximum Product Subarray
- LeetCode 53/152 Maximum Subarray/Maximum Product Subarray---DP **
- leetcode152-Maximum Product Subarray(乘积最大子数组)
- LeetCode(152) Maximum Product Subarray
- [LeetCode]152 Maximum Product Subarray
- [leetcode] 152 Maximum Product Subarray
- Leetcode 152 Maximum Product Subarray
- Leetcode 152 Maximum Product Subarray 子数组最大乘积
- LeetCode-152:Maximum Product Subarray (乘积最大连续子数组) -- medium