152. Maximum Product Subarray

和53. Maximum Subarray是一个思路,所以在一起做了,主要就是维护一个局部最优和一个全局最优。

不同在于,因为是有正负数,负号会导致上一轮的最小可能在这轮成为最大的,所以每一次不仅要记录一个局部最大解,还要记录一个局部最小解。

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

bug记录:

第9行,因为localMax计算过一次,所以在第11行的时候已经更新了,所以要先记录一下。

 

posted @ 2016-03-03 10:31  warmland  阅读(114)  评论(0编辑  收藏  举报