最大乘积

Posted NEU-2015

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最大乘积相关的知识,希望对你有一定的参考价值。

问题描述:输入n个元素组成的序列S,你需要找出一个乘积最大的连续子序列。

  样例输入

    3
    2 4 -3
    5
    2 5 -1 2 -1
    7
    -2 4 0 3 5 8 -1

解题关键:因为要求连续,所以当最大值小于当前值时,立刻开启新的子串!用数组保存分别到达数组每一个值时对应的最大值和最小值!

import java.util.Scanner;
/**
 * 最大乘积
 * @author NEU-2015
 *
 */
public class Demo {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        long[] max;     
        long[] min;
        int count;
        int[] array;
        long result;
        while(input.hasNext()) {
            count = input.nextInt();
            array = new int[count];
            max = new long[count];
            min = new long[count];
            for(int i = 0; i < count; i++) {
                array[i] = input.nextInt();
            }
            max[0] = array[0];
            min[0] = array[0];
            for(int i = 1; i < count; i++) {
                max[i] = Max(max[i-1]*array[i], min[i-1]*array[i], array[i]);
                min[i] = Min(max[i-1]*array[i], min[i-1]*array[i], array[i]);
            }
            result = max[0];
            for(int i = 1; i < count; i++) {
                if(max[i] > result) {
                    result = max[i];
                }
            }
            System.out.println(result);
        }
        input.close();
    }

    private static long Max(long l, long m, int i) {
        long max = l;
        if(m > max) {
            max = m;
        }
        if(i > max) {
            max = i;
        }
        return max;
    }

    private static long Min(long l, long m, int i) {
        long min = l;
        if(m < min) {
            min = m;
        }
        if(i < min) {
            min = i;
        }
        return min;
    }
}

 

以上是关于最大乘积的主要内容,如果未能解决你的问题,请参考以下文章

[程序员代码面试指南]数组和矩阵问题-数组中子数组的最大累乘积

最大K乘积问题

华为OD机试 - 计算最大乘积(Java) | 机试题+算法思路+考点+代码解析 2023

华为OD机试 - 计算最大乘积(Java) | 机试题+算法思路+考点+代码解析 2023

华为OD机试真题Java实现计算最大乘积真题+解题思路+代码(2022&2023)

最大回文乘积