题解 | #连续子数组的最大乘积#

连续子数组的最大乘积

http://www.nowcoder.com/practice/abbec6a3779940aab2cc564b22d36859

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param nums int整型vector 
     * @return int整型
     */
    //本题的思想为动态规划
    //定义一个一样长的node类型的dp数组
    //dp[i]有两个值,dp[i].max的含义为必须以nums[i]为结尾的情况下连续子数组的最大值
    //dp[i].min的含义为必须以nums[i]为结尾的情况下,连续子数组的最小值
    //为什么要求最小值,比如实例3,-2*-6的结果反而是最大的,这就是为什么要求最小值的原因
    //用一个变量res统计求dp数组的过程中出现的最大值即可
    struct node{
        int max;
        int min;
    };
    int max(int a,int b){
        return a>b?a:b;
    }
    int min(int a,int b){
        return a>b?b:a;
    }
    int maxProduct(vector<int>& nums) {
        // write code here
        if(nums.size()<=0)
            return 0;
        int n=nums.size();
        node dp[n];
        dp[0].max=nums[0];
        dp[0].min=nums[0];
        int res=dp[0].max;
        for(int i=1;i<n;i++){
            dp[i].max=max(max(nums[i]*dp[i-1].max,nums[i]*dp[i-1].min),nums[i]);
            dp[i].min=min(min(nums[i]*dp[i-1].max,nums[i]*dp[i-1].min),nums[i]);
            res=max(res, dp[i].max);
        }
        return res;
    }
};
全部评论

相关推荐

04-30 21:35
已编辑
长安大学 C++
晓沐咕咕咕:评论区没被女朋友好好对待过的计小将可真多。觉得可惜可以理解,毕竟一线大厂sp。但是骂楼主糊涂的大可不必,说什么会被社会毒打更是丢人。女朋友体制内生活有保障,读研女朋友还供着,都准备订婚了人家两情相悦,二线本地以后两口子日子美滋滋,哪轮到你一个一线城市房子都买不起的996清高计小将在这说人家傻😅
点赞 评论 收藏
分享
05-09 12:23
已编辑
华南理工大学 Java
野猪不是猪🐗:给他装的,双九+有实习的能看的上这种厂我直接吃⑨✌们拿它练练面试愣是给他整出幻觉了
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务