criskgl
8/12/2019 - 9:49 AM

maximum subarray sum

public class MaxSubArraySum {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[] a = {1, -3, 2, 1,-1};
		int result = maxSumSubarray(a);
		System.out.println(result);
	}
	
	public static int maxSumSubarray(int[] A){
		int n = A.length;
		int local_max = 0;
		int global_max = Integer.MIN_VALUE;
		  
		for(int i = 0; i < n; i++){
			/*
			* Tenemos que terminar si el elemento por si slo mejora el resultado o no 
			* al sumarse a a suma de los elementos que venían por detrás(local_max).
			* Si mejorase el resultado se ese eelemento evaluado se convertiria en local_max 
			* Si no lo mejorase se uniria a los de detraás reescribiendo el local_max a lo que 
			* había en local_max por lo que había en local_max más el elemento evaluado
			*/
			int current = A[i];
			local_max = Math.max(current, current + local_max);
			if(local_max > global_max){
				global_max = local_max;
			}
		}
		return global_max;
	}
}