首页 > 代码库 > DP Leetcode - Maximum Product Subarray
DP Leetcode - Maximum Product Subarray
最近一直忙着写paper,很久没做题,一下子把题目搞复杂了。。思路理清楚了非常简单,每次只需更新2个值:当前子序列最大乘积和当前子序列的最小乘积。最大乘积被更新有三种可能:当前A[i]>0,乘以前面最大的数(>0),得到新的最大乘积;当前A[i]<0,乘以前面最小的数(<0),得到新的最大乘积;A[i]它自己>0,(A[i-1]==0。最小乘积同理。。
class Solution { public: int Max(int a, int b, int c) { int max = -1 << 30; if (a >= b) max = a; else max = b; if (c > max) max = c; return max; } int Min(int a, int b, int c) { int min = 1 << 30; if (a <= b) min = a; else min = b; if (c < min) min = c; return min; } int maxProduct(int A[], int n) { int maxPPrev=A[0], maxP; int minPPrev = A[0], minP; int max = A[0]; for (int i = 1; i < n; i++) { maxP = Max(maxPPrev * A[i], minPPrev * A[i], A[i]); minP = Min(maxPPrev * A[i], minPPrev * A[i], A[i]); maxPPrev = maxP; minPPrev = minP; if (maxPPrev > max) max = maxPPrev; if (minPPrev > max) max = minPPrev; } return max; } };
DP Leetcode - Maximum Product Subarray
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。