延伸问题: 最大子段乘: 方案与这个题一样,只是需要记录max和min,因为最小值如果是负的话,下一次乘一个负数可能变成最大值 最大值有三种来源:前边的乘积乘以当前值,前边的最小值乘以当前值,当前值
public static void getSubArrMul(int [] array) { int res = 0,tempMax = 0; int max = array[0]; int min = array[0]; for(int i = 1; i<array.length; i++) { tempMax = getMax(max*array[i],min*array[i],array[i] ); min = getMin(max*array[i],min*array[i],array[i] ); max = tempMax; res = Math.max(res, max); } System.out.println(res); } public static int getMax(int a,int b, int c) { return Math.max(Math.max(a, b),c); } public static int getMin(int a,int b, int c) { return Math.min(Math.min(a, b),c); }