一个数组中连续的最大积
时间: 2024-05-27 16:14:27 浏览: 96
题目描述:
给定一个整数数组,找出其中连续的最大乘积。
输入:[2,3,-2,4]
输出:6
解释:子数组 [2,3] 有最大乘积 6。
输入:[-2,0,-1]
输出:0
解释:结果不能为负数,最大乘积为 0。
思路:
本题与“连续子数组的最大和”类似,只不过需要考虑负数的情况。具体思路如下:
- 遍历数组,同时记录当前子数组的最大值和最小值(因为负数乘以负数为正数,所以需要记录最小值)以及全局最大值;
- 当遇到负数时,最大值和最小值需要交换。
代码实现:
class Solution {
public int maxProduct(int[] nums) {
int max = Integer.MIN_VALUE;
int imax = 1, imin = 1;
for (int num : nums) {
if (num < 0) {
int tmp = imax;
imax = imin;
imin = tmp;
}
imax = Math.max(imax * num, num);
imin = Math.min(imin * num, num);
max = Math.max(max, imax);
}
return max;
}
}
阅读全文