乘积最大子数组

给你一个整数数组 nums ,请你找出数组中乘积最大的非空连续
子数组
(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。
测试用例的答案是一个 32-位 整数。

  • 输入: nums = [2,3,-2,4]

  • 输出: 6
    解释: 子数组 [2,3] 有最大乘积 6。

  • 输入: nums = [-2,0,-1]

  • 输出: 0
    解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。

1
2
3
4
5
6
7
8
9
10
11
12
// 维护当前的最小值,如果当前元素是负值,交换最小值和最大值的值再相乘,
// 因为存在负数会使当前最小的变成最大的,最大的变成最小的
var maxProduct = function(nums) {
let ans = -Infinity,imax = 1,imin = 1;
for(const num of nums) {
if(num < 0) [imax,imin] = [imin,imax]
imax = Math.max(imax*num,num);
imin = Math.min(imin*num,num);
ans = Math.max(ans,imax)
}
return ans;
};