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
.
分别创建一个最大、最小数组用于记录数据,当数据项小于零从最小数组中选择元素,当数据项大于零时从最大数组中选择元素
java
class Solution {
public int maxProduct(int[] nums) {
if (nums == null || nums.length ==0) {
return 0;
}
int[] max = new int[nums.length];
int[] min = new int[nums.length];
max[0] = nums[0]; min[0] = nums[0];
int val = nums[0];
for (int i = 1; i < nums.length; i++) {
max[i] = min[i] = nums[i];
if (nums[i] > 0) {
max[i] = Math.max(max[i], max[i - 1] * nums[i]);
min[i] = Math.min(min[i], min[i - 1] * nums[i]);
} else {
max[i] = Math.max(max[i], min[i - 1] * nums[i]);
min[i] = Math.min(min[i], max[i - 1] * nums[i]);
}
val = Math.max(val, max[i]);
}
return val;
}
}
python
class Solution(object):
def maxProduct(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
if nums is None or len(nums) == 0:
return 0
maxArr, minArr = [nums[0]] * len(nums), [nums[0]] * len(nums)
val = nums[0]
for i in range(1, len(nums)):
maxArr[i], minArr[i] = nums[i], nums[i]
if nums[i] > 0:
maxArr[i] = max(maxArr[i], maxArr[i - 1] * nums[i])
minArr[i] = min(minArr[i], minArr[i - 1] * nums[i])
else:
maxArr[i] = max(maxArr[i], minArr[i - 1] * nums[i])
minArr[i] = min(minArr[i], maxArr[i - 1] * nums[i])
val = max(val, maxArr[i])
return val