30. El máximo y subarray continuo
título Descripción
ideas:
La programación dinámica, dp [i] representado por A [i] y el máximo final subsecuencia contigua
Cuando se proporciona la secuencia a A [i] y el máximo en el extremo, si la longitud de la secuencia es 1, dp [i] = a [i],
1, y la secuencia de adición de los anteriores y A [i], es decir, dp [i] = dp [i - 1] Si la longitud de la secuencia no + es A [i]; por lo tanto, la ecuación de transferencia: DP = max (A [ i], dp [i - 1 ] + A [i]);
De hecho, consultando dp [i - 1] es mayor que, si es mayor que 0, debe ser combinado con la secuencia anterior, no delante de la secuencia es menor que 00 o menor que 0; por lo tanto, la ecuación de transición de estado se puede cambiar a: dp [ ? i] = dp [i - 1]> 0 dp [i - 1] + A [i]: A [i];
. 1 público clase Solution { 2 público int FindGreatestSumOfSubArray ( int [] Array) { . 3 // programación dinámica, dp [i] representado por A [i] al final de la máxima y subsecuencia contigua . 4 // DP [I] = max (A [I], DP [I - 1.] + A [I]) 5. int [] DP = new new int [ser Array.length]; 6. DP [ 0 ] = array [ 0 ]; . 7 int max = - . 1 << 30 ; . 8 para ( int I = 1. ; I <ser Array.length; I ++ ) { . 9 // dp [i] = Math.max (array [i], dp [i - 1] + array [i]); 10 dp [i] = dp [i - 1 ]> 0 ? dp [i - 1 ] + array [i]: array [i]; 11 = max max> dp [i]? max: dp [i]; 12 } 13 de retorno max; 14 } 15 }