Given an integer array
nums
, find the contiguous subarray within an array (containing at least one number) which has the largest product.
Example:
Input: [2,3,-2,4]
Output: 6
Explanation: [2,3] has the largest product 6.
解释下题目:
求出一个整数数组中,子数组的最大的乘积
1. 记录下过去的
实际耗时:xxms
public int maxProduct(int[] nums) {
int res = nums[0];
int max = nums[0];
int min = nums[0];
for (int i = 1; i < nums.length; i++) {
int tmp = max;
max = Math.max(nums[i], Math.max(max * nums[i], min * nums[i]));
min = Math.min(nums[i], Math.min(tmp * nums[i], min * nums[i]));
res = Math.max(max, res);
}
return res;
}
首先这道题说了给的数组长度最少是1,所以不用担心数据问题。其次一开始拿到这道题的时候想了好久,后来发现这道题说了是个整型数组,然后就可以从下面的想法开始:对于int来说,如果忽略正负,就是先假设所有的数字都是正的,那么只有乘上0才会使它变小。如果考虑到负数的问题,那么两个负数就能抵消负数的影响,所以说只需要记下一个最大的,一个最小的(因为最小的可能会因为乘个负数变成最大的),也就是说记录下它们这两个潜力股就行,其他的是不可能得到解的。这里吐槽一下java能不能修改一下Math.max这种函数,能够让它接受任意个数的参数啊,不然嵌套好傻逼啊。。