题目:
给定一个整数数组 nums
,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。
示例 1:
输入: [2,3,-2,4]
输出: 6
解释: 子数组 [2,3] 有最大乘积 6。
示例 2:
输入: [-2,0,-1] 输出: 0 解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。
解题答案:
max:当前乘积最大值
zheng:当前连续的乘积和(大于等于0)
fu:当前连续的乘积和(大于等于0)
分别判断nums[i]为正数,负数以及0的情况下:max,zheng,fu变量的变化
class Solution { public int maxProduct(int[] nums) { if(nums.length < 1) return 0; if(nums.length == 1) return nums[0]; int zheng = 0; //当前连续的最大值 正数 int fu = 0; //当前连续的最小值 负数 int max = nums[0]; if(nums[0] > 0) zheng = nums[0]; if(nums[0] < 0) fu = nums[0]; for(int i = 1; i < nums.length; i++) { if(nums[i] > 0) { if(zheng > 0) { zheng = zheng * nums[i]; } else zheng = nums[i]; if(zheng > max) max = zheng; if(fu < 0) { fu = fu * nums[i]; } } else if(nums[i] == 0) { zheng = 0; fu = 0; if(0 > max) max = 0; } else{ //nums[i]为负数 则fu zheng要进行相应的变化 int temp = zheng; if(fu < 0) { zheng = fu * nums[i]; if(zheng > max) max = zheng; } else { zheng = 0; } if(temp > 0) { fu = temp * nums[i]; } else{ fu = nums[i]; } } } return max; } }