题目的要求是求一个一维数组中子串的最大乘积,比如:
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.
可以使用动态规划卡登算法来求解,但是需要注意的一点是,一个数与负数相乘可能会让最小的数变成最大的数,也有可能让最大的数变成最小的数,所以需要稍稍改动一下即可解决问题:
public int maxProduct(int[] nums) {
if (nums.length < 1)
return 0;
int result = nums[0];
int max = nums[0];
int min = nums[0];
for (int i = 1; i < nums.length; i++) {
int preMax = max;
max = Math.max(nums[i], Math.max(nums[i] * max, nums[i] * min));
min = Math.min(nums[i], Math.min(nums[i] * min, nums[i] * preMax));
result = Math.max(max, result);
}
return result;
}