请给出C语言或者c++实现代码
时间: 2024-04-17 21:24:00 浏览: 14
C++实现代码如下所示:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
long long maxProduct(std::vector<int>& nums) {
int n = nums.size();
long long maxProd = nums[0];
long long minProd = nums[0];
long long result = nums[0];
for (int i = 1; i < n; i++) {
if (nums[i] < 0)
std::swap(maxProd, minProd);
maxProd = std::max((long long)nums[i], maxProd * nums[i]);
minProd = std::min((long long)nums[i], minProd * nums[i]);
result = std::max(result, maxProd);
}
return result;
}
int main() {
std::vector<int> nums = {2, 3, -2, 4, -1};
long long result = maxProduct(nums);
std::cout << "The maximum product is: " << result << std::endl;
return 0;
}
```
以上代码通过动态规划的思想,使用两个变量`maxProd`和`minProd`来记录当前累积的最大乘积和最小乘积。遍历数组时,根据当前元素的正负情况更新`maxProd`和`minProd`。每次更新`maxProd`时,都将其与当前元素相乘,然后与当前最大乘积进行比较,取较大者。最后返回`result`即为最大乘积。在给定的示例中,输出结果为14。