//乘积最大子数组:给定一个整数数组 nu,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。
#include<iostream>
#include<vector>
using namespace std;
int maxProduct(vector<int>& nums) {
int n = nums.size(), res = nums[0];
vector<int>f(n , 0), g(n , 0);
f[0] = nums[0], g[0] = nums[0]; // 初始化
for (int i = 1; i < n; i++)
{
f[i] = max(nums[i], max(f[i - 1] * nums[i], g[i - 1] * nums[i])); //乘积最大值
g[i] = min(nums[i], min(g[i - 1] * nums[i], f[i - 1] * nums[i])); //乘积最小值
res = max(res, f[i]);
}
return res;
}
int main() {
vector<int> nu = { 1,3,-5,24,-2,-6,9 };
cout << maxProduct(nu);
return 0;
}
动态规划14--乘积最大子数组
最新推荐文章于 2024-05-30 16:17:47 发布