标签:oid pre main package http 技术 etc ati loading
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));
}
}
运行结果:

LeetCode#152-乘积最大子数组-前缀和扩展到前缀积
标签:oid pre main package http 技术 etc ati loading
原文地址:https://www.cnblogs.com/jifeng0902/p/13371259.html