¿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;
}
}
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:
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.
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.
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.