Para probar la oferta de seguridad 30. La máxima y continua sub-array

30. El máximo y subarray continuo

título Descripción

HZ ocasionalmente conseguir algunas cuestiones profesionales a parpadear los estudiantes de ciencias no informáticos. Después de que el grupo de prueba terminará hoy, él tomó la palabra: en el reconocimiento de patrones unidimensional de edad, a menudo es necesario para calcular el máximo y continuo sub-vectores cuando el vector es un número entero positivo, el problema resuelto. Sin embargo, si el vector contiene un número negativo, debe contener un número negativo, y esperar un número positivo al lado de él sería compensarlo? Por ejemplo: {6, -3, -2,7, -15,1,2,2}, y los máximos sucesivos sub-vectores de 8 (a partir de 0, hasta la tercera). Para una matriz y devuelve su subsecuencia máxima continua y no se deje engañar que viva? (Longitud Sub-vector es al menos 1)

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 }

 

Supongo que te gusta

Origin www.cnblogs.com/hi3254014978/p/12589314.html
Recomendado
Clasificación