maximum product subarray

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

一.暴力破解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class  {
public int maxProduct(int[] nums) {
int n=nums.length;
int ans=-2147483648;
for(int i=0;i<n;i++)
{
for(int last=i;last<n;last++)
{
int product=1;
for(int j=i;j<=last;j++)
{
product*=nums[j];
if(product>ans)
{
ans=product;
}
}
}
}
return ans;
}
}

二、优化枚举

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class  {
public int maxProduct(int[] nums) {
int n=nums.length;
int ans=-2147483648;
for(int i=0;i<n;i++)
{
int product=1;
for(int last=i;last<n;last++)
{
product*=nums[last];
if(product>ans)
{
ans=product;
}
}
}
return ans;
}
}

三、时间复杂度为O(n)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class  {
public int maxProduct(int[] nums) {
int maxProduct=nums[0];
int minProduct=nums[0];
int Product=nums[0];
int n=nums.length;
for(int i=1;i<n;i++)
{
int temp=maxProduct;
maxProduct=Math.max(Math.max(maxProduct*nums[i],minProduct*nums[i]),nums[i]);
minProduct=Math.min(Math.min(temp*nums[i],minProduct*nums[i]),nums[i]);
if(maxProduct>Product)
{
Product=maxProduct;
}
}
return Product;
}
}