zoukankan      html  css  js  c++  java
  • 152. Maximum Product Subarray

    欢迎fork and star:Nowcoder-Repository-github

    152. 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. 
    
    

    解析

    • 而对于Product Subarray,要考虑到一种特殊情况,即负数和负数相乘:如果前面得到一个较小的负数,和后面一个较大的负数相乘,得到的反而是一个较大的数,如{2,-3,-7},所以,我们在处理乘法的时候,除了需要维护一个局部最大值,同时还要维护一个局部最小值,由此,可以写出如下的转移方程式:
    max_copy[i] = max_local[i]
    max_local[i + 1] = Max(Max(max_local[i] * A[i], A[i]),  min_local * A[i])
    min_local[i + 1] = Min(Min(max_copy[i] * A[i], A[i]),  min_local * A[i])
    
    class Solution_152 {
    
    	//分析:此题我们不仅要保存一个最大值,还得保存一个最小值,因为负负相乘等于正数,比如 - 2 4 - 5,即localMIn[i]表示以i结尾的连续字串乘积的最小值,而localMax[i]表示以i结尾的连续字串乘积的最大值,那么:
    	//localMax[i] = max(max(localMin[i] * A[i], A[i] * localMax[i]), A[i]); 而localMin[i] = min(min(localMin[i] * A[i], A[i] * localMax[i]), A[i]);
    public:
    	int getMax(int x, int y)
    	{
    		return x > y ? x : y;
    	}
    	int getMin(int x, int y)
    	{
    		return x < y ? x : y;
    	}
    	int maxProduct(vector<int>& nums) {
    		if (nums.size()==0)
    		{
    			return 0;
    		}
    		if (nums.size()==1)
    		{
    			return nums[0];
    		}
    
    		int local_min = nums[0];
    		int local_max = nums[0];
    
    		int global = nums[0];
    		int local_max_copy = 0;
    		for (size_t i = 1; i < nums.size(); i++)
    		{
    			local_max_copy = local_max;
    			local_max = getMax(getMax(local_max*nums[i], nums[i]), local_min*nums[i]); //取三者中的大者
    			local_min = getMin(getMin(local_min*nums[i], nums[i]),local_max_copy*nums[i]);
    			global = getMax(global, local_max);
    
    		}
    
    		return global;
    	}
    };
    
    

    题目来源

  • 相关阅读:
    tar命令,vi编辑器
    Linux命令、权限
    Color Transfer between Images code实现
    利用Eclipse使用Java OpenCV(Using OpenCV Java with Eclipse)
    Matrix Factorization SVD 矩阵分解
    ZOJ Problem Set
    Machine Learning
    ZOJ Problem Set
    ZOJ Problem Set
    ZOJ Problem Set
  • 原文地址:https://www.cnblogs.com/ranjiewen/p/8136135.html
Copyright © 2011-2022 走看看