LeetCode 152. Maximum Product Subarray

原题链接在这里:https://leetcode.com/problems/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.

题解:

Maximum Subarray类似。但出了要维护一个局部最大量外还需要同时多维护一个局部最小量。

e.g.[-2,3,-4], 若不维护局部最小量, i = 1时,局部最大是3, 全局最大也是3, i=2时, 局部最大变成-4, 全局最大变成3, 但实际全局最大应该是8. 这是因为负数与负数相乘可能会产生一个很大的正数,与加法只要是负一定变小不同。

所以要同时维护一个局部最小变量,以防当前值是负数。

Time Complexity: O(n). Space: O(1).

AC Java:

 1 public class Solution {
 2     public int maxProduct(int[] nums) {
 3         if(nums == null || nums.length == 0){
 4             return 0;
 5         }
 6         int localMax = nums[0];
 7         int localMin = nums[0];
 8         int globalMax = nums[0];
 9         for(int i = 1; i<nums.length; i++){
10             int temp = localMax;
11             localMax = Math.max(Math.max(temp*nums[i], nums[i]), localMin*nums[i]);
12             localMin = Math.min(Math.min(localMin*nums[i], nums[i]), temp*nums[i]);
13             globalMax = Math.max(globalMax, localMax);
14         }
15         return globalMax;
16     }
17 }

类似Maximum Sum Circular Subarray.

posted @ 2015-09-15 12:14  Dylan_Java_NYC  阅读(624)  评论(0编辑  收藏  举报