es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Qué está mal con mi implementación del montón en C++?

Estoy tratando de implementar una estructura de montículo para un juez en línea. Estoy muy feliz con la implementación, cumple con todos mis casos de prueba, pero el juez en línea la rechaza.

La función inserta añade el nuevo elemento y luego lo desplaza hacia arriba en el árbol binario. La función removeMax reemplaza el elemento mayor con el último en el vector y luego lo desplaza hacia abajo.

vector<int> heap;

int getMax(){
    return heap[0];
}

int getSize(){
    return heap.size();
}

void insert(int element){
    heap.push_back(element);
    int i = heap.size() - 1;

while(element > heap[i / 2]) {
    swap(heap[i], heap[i / 2]);
    i = i / 2;
}

}

void removeMax(){
    heap[0] = heap[heap.size() - 1];
    heap.pop_back();
    int i = 0;
    int iGreater = heap[i * 2] > heap[i * 2 + 1] ? i * 2 : i * 2 + 1;

while(i < heap.size() &&  heap[i] < heap[iGreater]) {
    swap(heap[i], heap[iGreater]);
    i = iGreater;
    iGreater = heap[i * 2] > heap[i * 2 + 1] ? i * 2 : i * 2 + 1;
}

}
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Pueden existir múltiples razones por las cuales el juez en línea está rechazando la implementación de la estructura de heap. Algunas posibles razones son:

    1. Falta el archivo de encabezado: Es posible que falte el archivo(s) de encabezado necesario(s) que el juez en línea espera para ejecutar el código. Por lo tanto, asegúrate de incluir todos los archivos de encabezado requeridos.
    2. Incompatibilidad de versión de compilación: El juez en línea podría estar compilando el código en una versión diferente de C++ a la utilizada localmente. Verifica la versión de C++ utilizada por el juez en línea y asegúrate de compilar el código en la misma versión.

    3. Error en asignación de memoria: Es posible que el juez en línea se quede sin memoria al ejecutar el código debido a una fuga de memoria o un error de desbordamiento. Asegúrate de implementar correctamente la estructura de heap y de que no haya fugas de memoria ni errores de desbordamiento.

    4. Complejidad temporal: El juez en línea podría rechazar el código porque tarda demasiado tiempo en ejecutarse. En este caso, verifica la complejidad temporal del código y optimízalo si es necesario.

    En resumen, para identificar correctamente el problema, es necesario analizar cuidadosamente el feedback proporcionado por el juez en línea y diagnosticar el problema.

Comments are closed.