题目
分析
考虑到有负数的参与,会使现有的最大的变成最小的,最小的变成最大的,实际上也可以看做是一种动态规划,imax和imin分别记录的是以当前位置为结尾的,最大和最小的子序列乘积的大小。
代码
public static int maxProduct(int[] nums){ int imax=Integer.MIN_VALUE; int imin= Integer.MAX_VALUE; int max=Integer.MIN_VALUE; for(int i=0;i<nums.length;i++) { if(nums[i]<0) { int temp=imax; imax=imin; imin=temp; } imax=Math.max(imax*nums[i],nums[i]); imin=Math.min(imin*nums[i],nums[i]); max=Math.max(max,imax); } return max; }
学习情况
1次