• 152. Maximum Product Subarray


        /*
         * 152. Maximum Product Subarray
         * 12.29 by Mingyang
         * 其实子数组乘积最大值的可能性为:累乘的最大值碰到了一个正数;累乘的最小值(负数),碰到了一个负数。
         * 所以每次要保存累乘的最大(正数)和最小值(负数)。
         * 如果之前的最大和最小值同当前元素相乘之后,没有当前元素大(或小)那么当前元素就可作为新的起点。
         * 例如,前一个元素为0的情况,{1,0,9,2},到9的时候9应该作为一个最大值,也就是新的起点,
    * {1,0,-9,-2}也是同样道理,-9比当前最小值还小, * 所以更新为当前最小值。这种方法只需要遍历一次数组即可,算法时间复杂度为O(n)。 * 不要以为所有的dp问题都要设置一个dp数组!!!!!!
    * 有一点注意的就是 max_temp = Math.max(Math.max(a,b), A[i]);
    * 更新最大最小值得时候,不光是前面最大值乘以现在的值和现在的值比较,还有最小值乘以现在值

    */ public static int maxProduct(int A[]) { if(A==null||A.length==0) { return 0; } int maxProduct = A[0]; int max_temp = A[0]; int min_temp = A[0]; for(int i=1;i<A.length;i++) { int a = A[i]*max_temp; int b = A[i]*min_temp; max_temp = Math.max(Math.max(a,b), A[i]); min_temp = Math.min(Math.min(a,b), A[i]); maxProduct = Math.max(maxProduct, max_temp); } return maxProduct; }
  • 相关阅读:
    jmeter BeanShell内置变量的基本使用
    自定义 resetCSS
    JavaScript + html 制作钟表
    JavaScript 实现放大镜效果
    JavaScript 实现拖拽
    JavaScript 阻止事件的默认行为
    JavaScript 事件冒泡
    JavaScript 鼠标事件、键盘事件
    JavaScript window.location
    JavaScript 中document.getElementsByClassName() 在ie8以下不兼容问题
  • 原文地址:https://www.cnblogs.com/zmyvszk/p/5552161.html
Copyright © 2020-2023  润新知