题目1527:首尾相连数组的最大子数组和

来源:互联网 发布:淘宝 消防工程师教材 编辑:程序博客网 时间:2024/06/05 21:16
import java.util.Scanner;import java.io.IOException;import java.io.FileReader;import java.io.BufferedReader;class Main{private final static boolean DEBUG = false;public static void main(String[] args) throws IOException{Scanner cin;int n;int[] a;if (DEBUG) {cin = new Scanner(new BufferedReader(new FileReader("d:\\OJ\\uva_in.txt")));} else {cin = new Scanner(System.in);}while (cin.hasNext()) {n = cin.nextInt();a = new int[n];for (int i = 0; i < n; i++) {a[i] = cin.nextInt();}int sum1, min;sum1 = min = a[0];int index = 0;for (int i = 1; i < n; i++) {if (sum1 < 0) {sum1 += a[i];} else {sum1 = a[i];}if (sum1 < min) {min = sum1;index = i;}}int[] sum = new int[n];int max = sum[(index + 1) % n] = a[(index + 1) % n];for (int i = 2; i < n; i++) {int prev = (index + i - 1) % n;int cur = (index + i) % n;if (sum[prev] > 0) {sum[cur] = sum[prev] + a[cur];} else {sum[cur] = a[cur];}max = Math.max(max, sum[cur]);}int b, sum2;b = sum2 = a[0];for (int i = 1; i < n; i++) {if (sum2 > 0) {sum2 += a[i];} else {sum2 = a[i];}if (sum2 > b) {b = sum2;}}if (b > max) max = b;if (max < 0) max = 0;System.out.println(max);}}}

0 0
原创粉丝点击