标签:system.in static input.h 子序列 class [] array bsp int
问题描述:输入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; } }
标签:system.in static input.h 子序列 class [] array bsp int
原文地址:http://www.cnblogs.com/NEU-2015/p/7623296.html