leetcode 152. Maximum Product Subarray
题目
求一个数组的最大子段乘积
思路以及代码
先看下面代码,看完了以后再讲思路233
class Solution {
public:
int maxProduct(vector<int>& nums) {
int len = nums.size();
if(len == 0) return {};
if(len == 1) return {nums[0]};
int pre = 1, last = 1;
int res = nums[0];
for(int i=0; i<len; i++) {
pre *= nums[i];
last *= nums[len-i-1];
res = max(res, max(pre,last));
pre = (pre == 0) ? 1 : pre;
last = (last == 0) ? 1 : last;
}
return res;
}
};
由于一个数组可能全是正数,那我们直接求所有的数的乘积即为结果
如果一个数组有负数,我们假设下面这种形式 aBcD
,大写为负数,那么 最优秀解可能是 aBcD
如果是下面这种形式AbCdE
这样最优解可能就是AbCd
或者 bCdE