。。。。自己想到的真的太菜了,想用四个变量来存储,考虑到乘以负数最大值会变小的问题,但是没有想到要用最大值或者最小值与nums[i]来比较
package leetcode; /** * @author doyinana * @create 2020-05-20 20:27 */ public class L152 { public int maxProduct(int[] nums) { int temp1=0,temp2=0,min=1,max=1; for (int num:nums){ temp1=min*num; temp2=max*num; min=Math.min(temp1,temp2); max=Math.max(temp1,temp2); } } }
大佬的答案:
public class L152 { public int maxProduct(int[] nums) { int max=Integer.MIN_VALUE,imax=1,imin=1; for (int num:nums){ if (num<0){ int tmp=imax; imax=imin; imin=imax; } imax=Math.max(imax*num,num); imin=Math.min(imin*num,num); max=Math.max(max,imax); } return max; } }
另外一个的解答,其中有动态规划很多的总结