• [算法]数组子数组的最大累乘积


    题目:

    给定一个double类型的数组arr,其中的元素可正、可负、可为0。返回子数组累乘的最大乘积。

    思路:

    假设以arr[i-1]结尾的数组最小累乘积为min,最大累乘积为max,那么以arr[i]结尾的数组的最大累乘积可能有三种情况。

    • max*arr[i];如:[3,4,5]算到5时。
    • min*arr[i];如:[-3,4,-5]算到-5时。
    • arr[i];如:[0.3,0.4,5]算到5时。
    	public static double maxProduct(double[] arr) {
    
    		if (arr == null || arr.length == 0) {
    
    			return 0;
    
    		}
    
    		double max = arr[0];
    
    		double min = arr[0];
    
    		double res = arr[0];
    
    		double maxEnd = 0;
    
    		double minEnd = 0;
    
    		for (int i = 1; i < arr.length; ++i) {
    
    			maxEnd = max * arr[i];
    
    			minEnd = min * arr[i];
    
    			max = Math.max(Math.max(maxEnd, minEnd), arr[i]);
    
    			min = Math.min(Math.min(maxEnd, minEnd), arr[i]);
    
    			res = Math.max(res, max);
    
    		}
    
    		return res;
    
    	}
  • 相关阅读:
    深入理解iOS开发中的锁
    整理:iOS开发算法资料
    (二)ELK Filebeat简介
    (一)ELK 部署
    zabbix + grafana 展示
    (二)LVS介绍
    (一)集群介绍
    zabbix 监控 ESXI
    zabbix proxy 安装
    zabbix fping 监控网络质量
  • 原文地址:https://www.cnblogs.com/xiaomoxian/p/5189043.html
Copyright © 2020-2023  润新知