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
.
该题是一个动态规划题,但由于乘积时要考虑正负号,所以需要一个最大值数组max[]以nums[i]结尾的子串最大值,一个最小值min[]存储以nums[i]结尾的最小值。
做for循环,如果nums[i]<0,则max[i]等于min[i-1]和nums[i]乘积与nums[i]比大小,min[i]等于max[i]与nums[i]乘积与nums[i]比大小,而nums[i]>0时,刚好相反。
for循环结束后,对max数组做排序输出最大值即可。
具体代码如下:
public class Solution {
public int maxProduct(int[] nums) {
if(nums==null||nums.length==0)
return 0;
int length=nums.length;
int[] max=new int[length];
int[] min=new int[length];
max[0]=min[0]=nums[0];
for(int i=1;i<length;i++){
if(nums[i]<0){
max[i]=min[i-1]*nums[i]>nums[i]?min[i-1]*nums[i]:nums[i];
min[i]=max[i-1]*nums[i]<nums[i]?max[i-1]*nums[i]:nums[i];
}else{
max[i]=max[i-1]*nums[i]>nums[i]?max[i-1]*nums[i]:nums[i];
min[i]=min[i-1]*nums[i]<nums[i]?min[i-1]*nums[i]:nums[i];
}
}
Arrays.sort(max);
return max[length-1];
}
}