Maximum Product Subarray--leetcode
2014-11-13 16:17
519 查看
原题链接:https://oj.leetcode.com/problems/maximum-product-subarray/
题目大意:求一个序列的最大积连续子序列。
解题方法:一维动态规划。
思路:看到这道题,很容易联想到最大和连续子数组那道题,忘了的可以看一下https://oj.leetcode.com/problems/maximum-subarray/,或者看我的上一篇博文。但是这道题与最大和连续子序列的不同是,仅仅维护以下标i元素结尾的最大积(和)子序列是不行的,因为乘积与正负有关,负负得正是吧。这就需要我们在维护以下标i元素结尾的最大积子序列的同时,维护以下标i元素结尾的最小积子序列。这样递推公式就很同意得到,如下:
max_product[i+1]=max(max_product[i]*A[i+1],min_product[i]*A[i+1],A[i+1]),即三者中的最大值。
min_product[i+1]=max(max_product[i]*A[i+1],min_product[i]*A[i+1],A[i+1]),即三者中的最小值。
为求的最大积子序列,我们需要维护一个量,来求得max_product[]数组的最大值。
时间复杂度:由于遍历数组一边,所以为O(N),
空间复杂度:只需要维护几个量就可以,所以为O(1)
最大积在最大和连续子序列的基础上需要我们维护更多的量,是理解动态规划方法的一道不错的题。
题目大意:求一个序列的最大积连续子序列。
解题方法:一维动态规划。
思路:看到这道题,很容易联想到最大和连续子数组那道题,忘了的可以看一下https://oj.leetcode.com/problems/maximum-subarray/,或者看我的上一篇博文。但是这道题与最大和连续子序列的不同是,仅仅维护以下标i元素结尾的最大积(和)子序列是不行的,因为乘积与正负有关,负负得正是吧。这就需要我们在维护以下标i元素结尾的最大积子序列的同时,维护以下标i元素结尾的最小积子序列。这样递推公式就很同意得到,如下:
max_product[i+1]=max(max_product[i]*A[i+1],min_product[i]*A[i+1],A[i+1]),即三者中的最大值。
min_product[i+1]=max(max_product[i]*A[i+1],min_product[i]*A[i+1],A[i+1]),即三者中的最小值。
为求的最大积子序列,我们需要维护一个量,来求得max_product[]数组的最大值。
时间复杂度:由于遍历数组一边,所以为O(N),
空间复杂度:只需要维护几个量就可以,所以为O(1)
class Solution { public: int maxProduct(int A[], int n) { if(n<=0) return 0; int maxherepre = A[0]; int minherepre = A[0]; int maxsofar = A[0]; int maxhere, minhere; for (int i = 1; i < n; i++) { maxhere = max(max(maxherepre * A[i], minherepre * A[i]), A[i]); minhere = min(min(maxherepre * A[i], minherepre * A[i]), A[i]); maxsofar = max(maxhere, maxsofar); maxherepre = maxhere; minherepre = minhere; } return maxsofar; } int max(int i,int j){ return i<j?j:i; } int min(int i,int j){ return i<j?i:j; } };
最大积在最大和连续子序列的基础上需要我们维护更多的量,是理解动态规划方法的一道不错的题。
相关文章推荐
- [leetcode]Maximum Product Subarray最大子序列乘积
- LeetCode Maximum Subarray Maximum Product Subarray DP问题
- 1 Maximum Product Subarray_Leetcode
- 151_leetcode_Maximum Product Subarray
- LeetCode 笔记26 Maximum Product Subarray
- leetcode Maximum Product Subarray
- 【LeetCode】Maximum Product Subarray
- leetcode 之Maximum Product Subarray
- [Leetcode] Maximum Product Subarray
- [LeetCode]Maximum Product Subarray
- leetcode 152: Maximum Product Subarray
- Maximum Product Subarray - LeetCode 152
- LeetCode: Maximum Product Subarray && Maximum Subarray &子序列相关
- LeetCode 153 maximum subarray product
- Leetcode—Maximum Product Subarray
- Maximum Product Subarray -- LeetCode
- Leetcode Maximum Product Subarray
- Maximum Product Subarray(leetcode第152题)
- [leetcode] Maximum Product Subarray
- LeetCode 152: Maximum Product Subarray