给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。
- 方法一 全部遍历
class Solution {
public:
int maxProduct(vector<int>& nums) {
int i=0;
int j=0;
int maxNum=nums[0];
int length=nums.size();
while(i<length)
{
int num=1;
int temp=i;
for(j=i;j<length;j++)
{
num=num*nums[j];
if(num>maxNum)
{
maxNum=num;
temp=j;
}
if(num==0)
break;
}
i++;
}
return maxNum;
}
};
执行用时 :436 ms, 在所有 C++ 提交中击败了6.40%的用户
内存消耗 :11.5 MB, 在所有 C++ 提交中击败了6.25%的用户
- 动态规划
class Solution {
public:
int maxProduct(vector<int>& nums) {
int i=0;
int j=0;
int maxNum=1;
int minNum=1;
int length=nums.size();
int imax=-100;
for(i=0;i<length;i++)
{
if(nums[i]<0)
swap(maxNum,minNum);
maxNum=max(maxNum*nums[i],nums[i]);
minNum=min(minNum*nums[i],nums[i]);
imax=max(imax,maxNum);
}
return imax;
}
};