标签:
给出一数组a,求最大子数组乘积
算法思路:用动态垃规划.用maxValue(n)表示从0到n的最大子数组乘积,minValue(n)表示从0到n的最小子数组乘积。
状态转移方程为:
minValue(n)= min{minValue(n-1)*a[n], maxValue(n-1)*a[n], a[n]}
maxValue(n)=max{minValue(n-1)*a[n], maxValue(n-1)*a[n], a[n]}
在求取最大子数组乘积时,更新最大值结果。
代码如下:
class Solution { public: int maxProduct(vector<int>& nums) { int minValue = 1, maxValue = 1, result = numeric_limits<int>::min(); int len = nums.size(); for (int i = 0; i < len; i++) { int tempMin = min(maxValue * nums[i], min(minValue * nums[i], nums[i])); int tempMax = max(maxValue * nums[i], max(minValue * nums[i], nums[i])); minValue = tempMin; maxValue = tempMax; result = max(result, maxValue); } return result; } };以数组[2,3,-2,4]为例,输出结果为6
验证代码为:
#include <iostream> #include <algorithm> #include <vector> #include <limits> using namespace std; int main() { int a[4] = {2, 3, -2, 4}; vector<int> nums(a, a + 4); Solution solver; int res = solver.maxProduct(nums); cout << res << endl; return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/xiexingshishu/article/details/48223941