zoukankan      html  css  js  c++  java
  • DP Leetcode

    近期一直忙着写paper,非常久没做题,一下子把题目搞复杂了。。思路理清楚了非常easy,每次仅仅需更新2个值:当前子序列最大乘积和当前子序列的最小乘积。最大乘积被更新有三种可能:当前A[i]>0,乘曾经面最大的数(>0),得到新的最大乘积;当前A[i]<0,乘曾经面最小的数(<0),得到新的最大乘积;A[i]它自己>0,(A[i-1]==0。最小乘积同理。。


    class Solution {
    public:
    
    	int Max(int a, int b, int c)
    	{
    		int max = -1 << 30;
    
    		if (a >= b)
    			max = a;
    		else
    			max = b;
    		if (c > max)
    			max = c;
    
    		return max;
    	}
    
    
    	int Min(int a, int b, int c)
    	{
    		int min = 1 << 30;
    
    		if (a <= b)
    			min = a;
    		else
    			min = b;
    		if (c < min)
    			min = c;
    
    		return min;
    	}
    
    
    	int maxProduct(int A[], int n) {
    		int maxPPrev=A[0], maxP;
    		int minPPrev = A[0], minP;
    
    		int max = A[0];
    
    		for (int i = 1; i < n; i++)
    		{
    			maxP = Max(maxPPrev * A[i], minPPrev * A[i], A[i]);
    			minP = Min(maxPPrev * A[i], minPPrev * A[i], A[i]);
    
    			maxPPrev = maxP;
    			minPPrev = minP;
    
    			if (maxPPrev > max)
    				max = maxPPrev;
    
    			if (minPPrev > max)
    				max = minPPrev;
    		}
    
    		return max;
    	}
    };


  • 相关阅读:
    volatile 关键字介绍
    hystrix 线程数,超时时间设置测试
    idea git tag 管理
    wget 认知及常用命令【转载】
    yum 认知及使用
    zuul 性能分析
    java 内存分析
    eureka-8-Eureka 的健康检查
    eureka-7-多网卡下的ip选择
    鼠标拖动div宽/高值增加与减小
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4478867.html
Copyright © 2011-2022 走看看