import java.util.Arrays; import java.util.Random; public class MaxContiguousSubsequenceSum { public static int compute1(int[] arr) { int max = 0; for (int i = 0; i < arr.length; i++) { for (int j = i; j < arr.length; j++) { int sum = 0; for (int k = i; k <= j ; k++) { sum += arr[k]; } max = Math.max(max, sum); } } return max; } public static int compute2(int[] arr) { int max = 0; for (int i = 0; i < arr.length; i++) { int sum = 0; for (int j = i; j < arr.length; j++) { sum += arr[j]; max = Math.max(max, sum); } } return max; } public static int compute3(int[] arr) { int max = 0; int sum = 0; for (int i = 0; i < arr.length; i++) { sum = Math.max(0, arr[i] + sum); max = Math.max(sum, max); } return max; } public static int[] generateRandomArray(Random rand, int n, int k) { int[] arr = new int[n]; for (int i = 0; i < n; i++) { arr[i] = rand.nextInt(k); if (rand.nextBoolean()) { arr[i] = -arr[i]; } } return arr; } public static void main(String[] args) { Random rand = new Random(); int size = 10; int range = 10; System.out.print(String.format("Generating a random array of size %d... ", size)); int[] arr = generateRandomArray(rand, size, range); System.out.println("complete!"); System.out.println(String.format("arr = %s", Arrays.toString(arr))); System.out.println(String.format("compute1(arr) = %d", compute1(arr))); System.out.println(String.format("compute2(arr) = %d", compute2(arr))); System.out.println(String.format("compute3(arr) = %d", compute3(arr))); } }