LeetCode#152-乘積最大子陣列-字首和擴充套件到字首積
阿新 • • 發佈:2020-07-24
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)); } }
執行結果: