问题描述
给定数组,输出所有子数组的累积的最大值。
题解
- 以arr[i]结尾的最大累乘积=max{maxarr[i],minarr[i],arr[i]},其中max、mini表示以arr[i-1]结尾的最大累乘积、最小累乘积。
- 最后再取一个最大值即可。
- 时间复杂度O(n)
代码
public class Main {
public static void main(String args[]) {
int[] arr= {-2,4,0,3,5,8,-1};
int maxProduct=getMaxProduct(arr);
System.out.println(maxProduct);
}
public static int getMaxProduct(int[] arr) {
int max=arr[0];
int min=arr[0];
int maxProduct=arr[0];
for(int i=1;i<arr.length;++i) {
max=getMax(max*arr[i],min*arr[i],arr[i]);
min=getMin(max*arr[i],min*arr[i],arr[i]);
maxProduct=Math.max(max,maxProduct);
}
return maxProduct;
}
public static int getMin(int... vals) {
int min=Integer.MAX_VALUE;
for(int val:vals) {
if(val<min) {
min=val;
}
}
return min;
}
public static int getMax(int... vals) {
int max=Integer.MIN_VALUE;
for(int val:vals) {
if(val>max) {
max=val;
}
}
return max;
}
}
原文地址:https://www.cnblogs.com/coding-gaga/p/10909279.html
时间: 2024-10-10 01:11:47