题解 | #连续子数组的最大乘积#
连续子数组的最大乘积
http://www.nowcoder.com/practice/abbec6a3779940aab2cc564b22d36859
动态规划
通过
pos[i] = max(nums[i],max(nums[i]*pos[i-1], nums[i]*neg[i-1]));
neg[i] = min(nums[i],min(nums[i]*pos[i-1], nums[i]*neg[i-1]));
可以把数组中负值给剔除掉,只计算正数子数组的乘积。
代码如下:
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型vector
* @return int整型
*/
int maxProduct(vector<int>& nums) {
// write code here
int size = nums.size();
vector<int> pos(nums);
vector<int> neg(nums);
int result = nums[0];
for(int i = 1; i < size; i++){
pos[i] = max(nums[i],max(nums[i]*pos[i-1], nums[i]*neg[i-1]));
neg[i] = min(nums[i],min(nums[i]*pos[i-1], nums[i]*neg[i-1]));
result = max(result,pos[i]);
}
return result;
}
};