您的位置:首页 > 其它

152. Maximum Product Subarray

2015-08-25 09:09 295 查看
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
.

思路:

Maximum Subarray那题的变种。由于正负得负,负负得正的关系。以A[i]结尾的max product subarray同时取决于以A[i-1]结尾的max / min product subarray以及A[i]本身。因此,对每个i,需要记录min/max product两个状态:

max_product[i] = max(max_product[i-1]*A[i], min_product[i-1]*A[i], A[i])

min_product[i] = min(max_product[i-1]*A[i], min_product[i-1]*A[i], A[i])
class Solution {
public:
int maxProduct(int A[], int n) {
if(n<=0) return 0;
int ret, curMax, curMin;
ret = curMax = curMin = A[0];
for(int i=1; i<n; i++) {
int temp = curMax; //注意这里要保存curMax原来的值,因为下面一行代码将会改变curMax
curMax = max(max(curMax*A[i], curMin*A[i]),A[i]);
curMin = min(min(temp*A[i], curMin*A[i]),A[i]);
ret = max(ret, curMax);
}
return ret;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: