zoukankan      html  css  js  c++  java
  • LeetCode152:Maximum Product Subarray

    Find the contiguous subarray within an array (containing at least one number) which has the largest product.

    For example, given the array [2,3,-2,4],
    the contiguous subarray [2,3] has the largest product = 6.

    这道题是上面连续子数组和问题的扩展吧。非常遗憾没做来出。状态都定义对了。可是状态转移方程没有写出来。
    能够定义A[i]表示以i结尾的子数组的最大积。B[i]表示以i结尾的子数组的最小积。这里之所以要记录下最小积是为了预防两个负数相乘结果为正数这样的情况。那么状态转移方程是:
    A[i+1]=max{nums[i],nums[i]*A[i],nums[i]*B[i]}
    B[i+1]=min(nums[i],nums[i]*A[i],nums[i]*B[i])
    编写代码时注意须要将A[i]或B[i]先保存成暂时变量。


    最開始时考虑依据nums[i]的正负来更新A[i]和B[i]的值,可是没有准确认识到A[i]和B[i]的转移关系所以导致没有求出来。
    runtime:8ms

    class Solution {
    public:
        int maxProduct(vector<int>& nums) {
            int curMax=nums[0];
            int curMin=nums[0];
            int result=curMax;
            for(int i=1;i<nums.size();i++)
            {
                int tmp=curMin;
                curMin=min(nums[i],min(nums[i]*curMax,nums[i]*curMin));
                curMax=max(nums[i],max(nums[i]*curMax,nums[i]*tmp));
                result=max(result,curMax);
            }
            return result;
        }
    };
  • 相关阅读:
    Socket规划(1)
    hdu 2391 Filthy Rich
    UDP议定书图像高速传输无损失程序
    C# 通过豆瓣网络编程API获取图书信息
    OS调度算法常用摘要
    mysql回想一下基础知识
    2015第37周三
    2015第37周二
    2015第37周一
    2015第37周一struts2 jstl 标签
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/5386260.html
Copyright © 2011-2022 走看看