Given an integer array nums, find a subarray that has the largest product, and return the product.

The test cases are generated so that the answer will fit in a 32-bit integer.

 

Example 1:

Input: nums = [2,3,-2,4]
Output: 6
Explanation: [2,3] has the largest product 6.

Example 2:

Input: nums = [-2,0,-1]
Output: 0
Explanation: The result cannot be 2, because [-2,-1] is not a subarray.

 

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

 

//要考虑特殊情况,即负数和负数相乘,如2,-3,-7,所以在处理乘法时,除了维护一个局部最大值,还要维护一个局部最小值。

class Solution {

    public int maxProduct(int[] nums) {

       if (nums.length == 0)

          return 0;

       if (nums.length == 1)

          return nums[0];

       int maxsofar = nums[0];

       int maxherepre = nums[0];

       int minherepre = nums[0];

       int maxhere, minhere;

       for (int i = 1; i < nums.length; i++) {

          maxhere = Math.max(Math.max(maxherepre * nums[i], minherepre * nums[i]), nums[i]);

          minhere = Math.min(Math.min(maxherepre * nums[i], minherepre * nums[i]), nums[i]);

          maxsofar = Math.max(maxhere, maxsofar);

          maxherepre = maxhere;

          minherepre = minhere;

       }

       return maxsofar;

   }

}

原文地址:http://www.cnblogs.com/MarkLeeBYR/p/16910024.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性