最大乘积
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; } }
以上是关于最大乘积的主要内容,如果未能解决你的问题,请参考以下文章
[程序员代码面试指南]数组和矩阵问题-数组中子数组的最大累乘积
华为OD机试 - 计算最大乘积(Java) | 机试题+算法思路+考点+代码解析 2023
华为OD机试 - 计算最大乘积(Java) | 机试题+算法思路+考点+代码解析 2023