Find the contiguous subarray within an array (containing at least one number) which has the largest product.
For example, given the array [2,3,-2,4]
,
the contiguous subarray [2,3]
has the largest product = 6
.
Subscribe to see which companies asked this question.
解题技巧:
本题采用动态规划求解,目标是求连续子数组的最大乘积,由于容器中可能存在负数的情况,所以需要维护一个局部最小乘积,一个局部最大乘积,状态转移方程为:
a = min_local * nums[i];
b = max_local * nums[i];
min_local = min( min(a, b), nums[i]);
max_local = max( max(a, b), nums[i]);
max_global = max(max_local, max_global);
代码:
#include <iostream>
#include <vector>
using namespace std;
int maxProduct(vector<int>& nums)
{
int min_local = nums[0];
int max_local = nums[0];
int max_global = nums[0];
for(int i = 1 ; i < nums.size(); i ++)
{
int a = min_local * nums[i];
int b = max_local * nums[i];
min_local = min( min(a, b), nums[i]);
max_local = max( max(a, b), nums[i]);
max_global = max(max_local, max_global);
}
return max_global;
}
int main()
{
vector<int> nums;
int n;
while(cin >> n)
{
nums.push_back(n);
}
cout<<maxProduct(nums);
}