LeetCode 练习题解(152. Maximum Product Subarray)

来源:互联网 发布:淘宝联盟怎么做app 编辑:程序博客网 时间:2024/06/07 03:47

给一个数组,长度至少为1,要求找出连续长度子数组乘积的最大值

class Solution {public:    int maxProduct(vector<int>& nums) {        int tmpp=nums[0],tmpn=nums[0],ans=nums[0],tmp;        int len=nums.size();        for(int i=1;i<len;i++){            tmp=tmpp;            tmpp=max(max(nums[i],nums[i]*tmpp),nums[i]*tmpn);            tmpn=min(min(nums[i],nums[i]*tmp),nums[i]*tmpn);            ans=max(ans,tmpp);        }        return ans;    }};

初始化当前位置0的最大乘积tmpp,最小乘积tmpn,最终答案ans,并且用tmp来保存上一步的tmpp

当前位置i的最大乘积有三种可能,nums[i],nums[i]*tmpp,nums[i]*tmpn

逐步更新,最终得到ans



0 0
原创粉丝点击