LeetCode#152-乘积最大子数组-前缀和扩展到前缀积
package shuzu; /* 152. 乘积最大子数组 给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。 示例 1: 输入: [2,3,-2,4] 输出: 6 解释: 子数组 [2,3] 有最大乘积 6。 示例 2: 输入: [-2,0,-1] 输出: 0 解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。 //参考前缀和 前缀积 */ public class p152 { public static int maxProduct(int[] nums) { if(nums.length==1)return nums[0]; int ans=-100000,zhengmax=0,zhengmin=10000,fumax=-10000,fumin=0; int mul_i=1; for(int i=0;i<nums.length;i++){ mul_i*=nums[i]; ans=Math.max(ans,nums[i]); ans=Math.max(ans,mul_i); if(mul_i>0){ zhengmax=Math.max(zhengmax,mul_i); ans=Math.max(ans,zhengmax/zhengmin); zhengmin=Math.min(zhengmin,mul_i); } else if(mul_i<0){ fumin=Math.min(fumin,mul_i); //System.out.println("fumin-----++++++ "+fumin); ans=Math.max(ans,fumin/fumax); fumax=Math.max(fumax,mul_i); //System.out.println("fumax-----++++++ "+fumax); } else if(mul_i==0){ mul_i=1; zhengmax=0; zhengmin=10000; fumax=-10000; fumin=0; } } return ans; } public static void main(String[] args) { int a[]={-2,0,-1}; System.out.println(maxProduct(a)); } }
运行结果: