Maximum Product Subarray

转载 2016年05月30日 10:23:06

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.

用一维动态规划中的“局部最优和全局最优法”。这里的区别是维护一个局部最优不足以求得后面的全局最优,这是由于乘法的性质不像加法那样,累加结果只要是正的一定是递增,乘法中有可能现在看起来小的一个负数,后面跟另一个负数相乘就会得到最大的乘积。
不过事实上也没有麻烦很多,我们只需要在维护一个局部最大的同时,在维护一个局部最小,这样如果下一个元素遇到负数时,就有可能与这个最小相乘得到当前最大的乘积和,这也是利用乘法的性质得到的。

class Solution {
public:
    int maxProduct(vector<int>& nums) {
        if(nums.empty())
            return 0;
        if(nums.size()==1)
            return nums[0];
        int max_temp = nums[0];
        int min_temp = nums[0];
        int max_value = nums[0];
        for (int i = 1; i < nums.size(); i++)
        {
            int a = nums[i] * max_temp;
            int b = nums[i] * min_temp;

            max_temp = max( max(a,b) , nums[i]);
            min_temp = min( min(a,b) , nums[i]);

            max_value = max(max_temp,max_value);
        }
        return max_value;
    }
};

【LeetCode-面试算法经典-Java实现】【152-Maximum Product Subarray(子数组的最大乘积)】

【152-Maximum Product Subarray(子数组的最大乘积)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】代码下载【https://github.com/Wa...
  • DERRANTCM
  • DERRANTCM
  • 2015年08月24日 07:07
  • 2847

算法设计与分析的基础知识(1)

距离算法考试还有两周的时间,准备从现在开始用笔记的形式记录自己学习或复习算法课程的成果。不是有那么一句名言嘛:好记性不如烂笔头。Learn From Now! 算法是一系列解决问题的清晰指令,即对符合...
  • weixin_36870659
  • weixin_36870659
  • 2017年06月21日 22:02
  • 70

最大子数组问题 Maximum Subarray

Maximum Subarray: algorithm这个问题我们先看下问题的描述:问题描述Find the contiguous subarray within an array (containi...
  • liu2012huan
  • liu2012huan
  • 2016年05月02日 15:41
  • 10348

LeetCode--Maximum Subarray 最大连续子序列和 (动态规划)

动态规划-经典问题——最大连续子序列和 LeetCode--Maximum Subarray 最大连续子序列和...
  • mason_mow
  • mason_mow
  • 2014年05月25日 21:32
  • 3112

最大子序列和 Maximum Subarray

hackerank 算法->动态规划->The Maximum SubarrayGiven an array A={a1, a2, ..aN} of N elements, find the max...
  • u013342586
  • u013342586
  • 2016年07月27日 20:55
  • 207

最大子数组问题-GoLang实现

在一个数组A中寻找一个最大的子数组,这个问题可以用分治策略来求解。 首先需要划分问题,最大的子数组只有如下3中情况: 情况1:最大子序列出现在A[low]~A[mid] 情况2:最大子序列出现在A[m...
  • u013564276
  • u013564276
  • 2016年03月31日 16:55
  • 334

Maximum Subarray(最大子数组)

Maximum Subarray 我的思路: 1、以前是有做过hdoj上一个最长递增子序列的,想想那个比较麻烦,然后我使用和卖股票一样的算法。还把数组转换了一次,想想真是傻。 2、下面是我要...
  • DallasSeller
  • DallasSeller
  • 2014年11月26日 20:48
  • 353

Maximum Product Subarray 以及cout的输出顺序问题的讨论

Find the contiguous subarray within an array (containing at least one number) which has the largest ...
  • leo1949asd
  • leo1949asd
  • 2014年11月20日 19:28
  • 645

最大子数组和(The Maximum Subarray)

问题:求一个整型数组的(1)最大连续子数组和以及(2)不要求连续的最大子数组和 要求 返回的结果不能使空数组。 解答思路: (1)从前往后扫描数组,当前边累加的和大于零的时候,说明这个序...
  • ppslizejun
  • ppslizejun
  • 2016年05月15日 14:43
  • 266

最大子串和问题(Maximum Subarray)

本文转载自:http://blog.csdn.net/joylnwang/article/details/6859677 刚刚求连续子数组的最大和一个在O(n)时间内可以完成的Kadane算法,对原理...
  • willduan1
  • willduan1
  • 2016年11月10日 20:41
  • 3734
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Maximum Product Subarray
举报原因:
原因补充:

(最多只允许输入30个字)