Leetcode 152. 乘积最大子数组(DAY 47) ---- 动态规划学习期 (再做一道题吃午饭)

原题题目

在这里插入图片描述



代码实现(首刷小部分看解大部分自解)

int maxProduct(int* nums, int numsSize){
    
    
    int dp[numsSize][2],max = INT_MIN,i;
    for(i=0;i<numsSize;i++)
    {
    
    
        if(nums[i] >= 0)
        {
    
    
            if(!i)
            {
    
    
                dp[i][0] = nums[i];
                dp[i][1] = 0;
                max = dp[i][0];
            }
            else
            {
    
    
                dp[i][0] = fmax(nums[i],dp[i-1][0] * nums[i]);
                dp[i][1] = dp[i-1][1] * nums[i];
            }
        }
        else
        {
    
    
            if(!i)
            {
    
    
                dp[i][1] = nums[0];
                dp[i][0] = 0;
                max = dp[i][1];
            }
            else
            {
    
    
                dp[i][0] = dp[i-1][1] * nums[i];
                dp[i][1] = fmin(dp[i-1][0] * nums[i],nums[i]);
            }
        }
        if(i)   max = fmax(max,dp[i][0]);   
    }
    return max;
}

猜你喜欢

转载自blog.csdn.net/qq_37500516/article/details/113833152