Un enfoque simple de fuerza bruta al comparar todos los elementos con todos los demás elementos y luego encontrar la suma, obtendrá su respuesta en el tiempo O (n ^ 2). En su lugar, puede optar por Divide and Conquer, y puede resolverlo en tiempo O (nlogn).
En su lugar, puede usar el algoritmo de Kadane para encontrar la submatriz continua de suma máxima. Se ejecuta en tiempo O (n). Pero dado que su problema viene con una restricción adicional de densidad, necesitamos modificarlo un poco para obtener la respuesta. Entonces, en lugar de mantener el recuento de la suma, realizaremos un seguimiento de la densidad a medida que recorremos toda la matriz.
A continuación se muestra el algoritmo de Kadane que debe modificar según sus necesidades.
- ¿Cuál es la diferencia entre usar <y <= en la búsqueda binaria?
- ¿Qué hay de malo en mi implementación de tipo de fusión?
- ¿Por qué una elección de K es mejor que otras en el algoritmo K-means?
- ¿Cuál es la relación entre la complejidad del algoritmo y la complejidad del software?
- Cómo clasificar videos de YouTube usando el algoritmo de puntuación de Wilson
#include
#define MAX (a, b) (((a)> (b))? (a): (b))
void maxSum (int * arr, int n) {
int i, maxSum = arr [0], max = arr [0];
para (i = 1; i <n; i ++) {
max = MAX (arr [i], max + arr [i]);
maxSum = MAX (max, maxSum);
}
printf (“Suma máxima =% d \ n”, maxSum);
}
int main () {
int arr [] = {-2, -3, 4, -1, -2, 1, 5, -3};
maxSum (arr, 8);
devuelve 0;
}