Entrevista de Google en el sitio (graduado universitario – 2020)

Pregunta: dada una array que tiene 2n elementos, puede elegir n elementos de cualquier extremo de la array de modo que los valores obtenidos resulten en la suma máxima.

Ejemplos:

Input : 1 3 100 25 20 4  
Output : 103 

Enfoque: Inicialmente, probé el enfoque recursivo al mostrar ambas posibilidades de un elemento que puede incluirse o excluirse, pero me dijo que lo optimizara y se me ocurrió el enfoque de suma de prefijos.
Idea: La idea principal detrás del enfoque de suma de prefijos era que si seleccionamos elementos ‘x’ de la izquierda, podemos seleccionar elementos ‘n-x’ de la derecha.

int function(int arr[])
{
    Int n = arr.size();
    Int lpref[n], rpref[n]; // for left and right prefix sum
    Lpref[0] = arr[0], rpref[n - 1] = arr[n - 1];
    For(int i = 1; i < n; i++)
    {
        Lpref[i] = Lpref[i - 1] + arr[i];
    }
    For(int i = n - 2; i >= 0; i--)
    {
        rpref[i] = rpref[i + 1] + arr[i];
    }
    Int maxm = INT_MIN, m = n / 2;
    For(int i = 0; i < m - 1; i++)
    {
maxm =max(maxm, lpref[i]+rpref[n-1-i];
    }
    maxm = max(maxm, lpref[m - 1]);
    maxm = max(maxm, rpref[n - m]);
    return maxm;
}

Publicación traducida automáticamente

Artículo escrito por Briana y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *