题目描述:
给一个数组,找出一个连续的乘积最大的子数组。
Example 1:
Input: [2,3,-2,4]
Output: 6
Example 2:
Input: [-2,0,-1]
Output: 0
思路:
dp。记录之前的最大值和最小值,每次和当前值相乘,得到当前的最大值和最小值。
ans记录全局最大值。
代码:
class Solution {
public:
int maxProduct(vector<int>& nums) {
if (nums.empty()) return {};
if (nums.size() == 1) return nums[0];
int max_ = nums[0];
int min_ = nums[0];
int ans = max_;
for (int i=1; i<nums.size(); ++i) {
int max_cur = max(max (max_ * nums[i], min_ * nums[i]), nums[i]);
int min_cur = min(min (max_ * nums[i], min_ * nums[i]), nums[i]);
ans = max(ans, max_cur);
max_ = max_cur;
min_ = min_cur;
}
return ans;
}
};