package com.interview.algorithms.array; /** * Created_By: stefanie * Date: 14-7-18 * Time: 下午11:17 * * A int array contains positive and negative number, find the max of sum of continous sub array. */ public class C4_29_MaxSubArraySum { static class Range{ int begin; int end; int sum; } public static int max(int[] array){ int sum = 0, max = 0; int largest = array[array.length - 1]; for(int i = array.length - 1; i >= 0; i--){ sum = Math.max(sum + array[i], 0); if(sum > max) max = sum; if(largest < array[i]) largest = array[i]; } return max == 0? largest : max; } public static Range maxRange(int[] array){ C4_29_MaxSubArraySum.Range r = new C4_29_MaxSubArraySum.Range(); r.end = array.length - 1; int largest = array.length - 1; int sum = 0; for(int i = array.length - 1; i >= 0; i--){ if(sum + array[i] <= 0) r.end = i - 1; sum = Math.max(sum + array[i], 0); if(sum > r.sum) { r.sum = sum; r.begin = i; } if(array[largest] < array[i]) largest = i; } if(r.sum == 0){ r.sum = array[largest]; r.begin = r.end = largest; } return r; } public static int maxForword(int[] array){ int sum = 0, max = 0; int largest = array[0]; for(int i = 0; i < array.length; i++){ if(largest < array[i]) largest = array[i]; sum = Math.max(sum + array[i], 0); if(sum > max) max = sum; } return max == 0? largest : max; } }