您的位置:首页 > 其它

[LeetCode]152. Maximum Product Subarray

2016-02-04 18:52 435 查看

Problem Description

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.

Subscribe to see which companies asked this question

[]https://leetcode.com/problems/maximum-product-subarray/]

思路

使用DP!使用DP!

没有看标签之前思路错了,导致浪费了一下午的时间找边界值(还是没有事先写好Testcase的锅)。错误思路是使用0将数组区间分成若干部分,每个小部分进行负数的计数,并保存第一个和最后一个负数的位置,这样就可以计算出若干部分每个的MAX Product,再从中求最大值即可。但是!但是!但是!!这明明是一道DP的问题啊啊啊啊!!!(还是做题不多的锅)。。

DP的思路就很简单惹。。。O(n)的遍历数组,保存一个最大值和一个最小值(绝对值最大的负数),每次循环都会检查是否会产生一个新的最大值。

一开始没敢往DP方向想是考虑到没有重复值问题,比如a,b,c,d。如果a*b**c

Code

package Q152;

import java.lang.Math;

public class Solution {

public static int maxProduct(int[] nums) {
if(nums.length==1) return nums[0];
int max=0;
int min=0;
int tmp;
int ans=0;
for(int i=0;i<nums.length;i++){
tmp=max;
max=Math.max(Math.max(tmp*nums[i], min*nums[i]), nums[i]);
min=Math.min(Math.min(tmp*nums[i], min*nums[i]), nums[i]);
ans=Math.max(ans, max);
}

return ans;
}
//  public static void main(String[] args) {
//      int[] a = {2,-1,1,1};
//      System.out.print(maxProduct(a));
//
//  }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode