给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。
示例 1:
输入: [2,3,-2,4]
输出: 6
解释: 子数组 [2,3] 有最大乘积 6。
示例 2:
输入: [-2,0,-1]
输出: 0
解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。
int maxProduct(int* nums, int numsSize){
int nums_product_below_zero=0;
int nums_product_above_zero=0;
int max_product=numsSize>0?INT_MIN:0;
bool first=false;
for(int i=0;i<numsSize;i++)
{
max_product=max_product>nums[i]?max_product:nums[i];
if(nums[i]==0)
{
nums_product_below_zero=0;
nums_product_above_zero=0;
}
else
{
if(nums[i]>0)
{
if(nums_product_above_zero==0)nums_product_above_zero=nums[i];
else nums_product_above_zero*=nums[i];
nums_product_below_zero*=nums[i];
}
else
{
int tmp=nums_product_below_zero;
if(nums_product_above_zero==0)nums_product_below_zero=nums[i];
else nums_product_below_zero=nums_product_above_zero*nums[i];
nums_product_above_zero=tmp*nums[i];
}
if(nums_product_above_zero>0)first=true;
}
if(first)max_product=max_product>nums_product_above_zero?max_product:nums_product_above_zero;
}
return max_product;
}
执行用时 :20 ms, 在所有 C 提交中击败了28.72% 的用户
内存消耗 :7.3 MB, 在所有 C 提交中击败了75.47%的用户