1.题目描述
152. 乘积最大子数组
给定一个整数数组 nums
,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。
示例 1:
1 2 3
| 输入: [2,3,-2,4] 输出: 6 解释: 子数组 [2,3] 有最大乘积 6。
|
示例 2:
1 2 3
| 输入: [-2,0,-1] 输出: 0 解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。
|
2.代码实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| class Solution { public int maxProduct(int[] nums) { //总的数组的最大乘积 int max = Integer.MIN_VALUE;
//以当前节点为根节点的最大子数组的最大乘积 int subMax = 1;
//由于存在负数,那么会导致最大的变最小的,最小的变最大的。 //因此还需要维护 以当前节点为根节点的最大子数组的最小乘积 int subMin = 1;
//枚举数组 for (int i = 0; i < nums.length; i++) { //负数的处理 if (nums[i] < 0){ int temp = subMax; subMax = subMin; subMin = temp; }
//根据遍历的结点刷新到以当前节点为终结节点的最大值,最小值 subMax = Math.max(nums[i], nums[i] * subMax); subMin = Math.min(nums[i], nums[i] * subMin);
//更新最大值 max = Math.max(subMax, max); }
return max; } }
|