zoukankan      html  css  js  c++  java
  • [程序员代码面试指南]数组和矩阵问题-数组中子数组的最大累乘积

    问题描述

    给定数组,输出所有子数组的累积的最大值。

    题解

    • 以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;
        }
    }
    
  • 相关阅读:
    scrapy模拟用户登录
    我为什么选择Vim
    关于72键配列键盘的想法
    vim配图
    解决一些python的问题记录
    ros资料记录,详细阅读
    C语言的历史
    将制定目录家到系统PATH环境变量中
    让vim更加智能化
    如何自定义路径
  • 原文地址:https://www.cnblogs.com/coding-gaga/p/10909279.html
Copyright © 2011-2022 走看看