[程序员代码面试指南]数组和矩阵问题-数组中子数组的最大累乘积
Posted coding-gaga
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[程序员代码面试指南]数组和矩阵问题-数组中子数组的最大累乘积相关的知识,希望对你有一定的参考价值。
问题描述
给定数组,输出所有子数组的累积的最大值。
题解
- 以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;
}
}
以上是关于[程序员代码面试指南]数组和矩阵问题-数组中子数组的最大累乘积的主要内容,如果未能解决你的问题,请参考以下文章
《程序员代码面试指南》第八章 数组和矩阵问题 计算数组的小和
《程序员代码面试指南》第八章 数组和矩阵问题 自然数数组的排序
《程序员代码面试指南》第八章 数组和矩阵问题 需要排序的最短子数组长度