题目
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.
题意
求乘积最大的子数组(连续)的乘积
分析
乘负数可能会让最大值变成最小值.
所以两个临时变量, 存以i结尾的子数组的最大值tmax和最小值tmin,
if(nums[i]<0)swap(tmax,tmin)
i
f
(
n
u
m
s
[
i
]
<
0
)
s
w
a
p
(
t
m
a
x
,
t
m
i
n
)
tmax=max(nums[i],tmax∗nums[i])
t
m
a
x
=
m
a
x
(
n
u
m
s
[
i
]
,
t
m
a
x
∗
n
u
m
s
[
i
]
)
tmin=min(nums[i],tmin∗nums[i])
t
m
i
n
=
m
i
n
(
n
u
m
s
[
i
]
,
t
m
i
n
∗
n
u
m
s
[
i
]
)
实现
class Solution {
public:
int maxProduct(vector<int>& nums) {
if (nums.empty()) return 0;
int res = nums[0], tmax = nums[0], tmin = nums[0];
for(int i = 1; i < nums.size(); i++) {
if (nums[i] < 0)
swap(tmax, tmin);
tmax = max(nums[i], tmax*nums[i]);
tmin = min(nums[i], tmin*nums[i]);
res = max(res, tmax);
}
return res;
}
};