Como Joshua Alday ya respondió, la complejidad del tiempo en el peor de los casos puede ir hasta [matemáticas] O (n ^ 2) [/ matemáticas]
Si queremos hacer esto en O (n), podemos usar una pila y empujar todos los elementos máximos hasta ahora escaneando la matriz de derecha a izquierda. Por último, haga estallar los elementos hasta que la pila no esté vacía.
A continuación se muestra la implementación para el mismo:
- Cómo responder paso a paso las preguntas de la entrevista de diseño de su sistema
- ¿Alguna vez ha sido entrevistado por Jabong?
- ¿Cómo puede uno prepararse para la entrevista de Amazon SDE 2 en 3 semanas para habilidades relacionadas con c ++?
- ¿Es realmente importante el análisis de algoritmos para codificar entrevistas cuando solo puede descubrir complejidades de casos generales (como nlog (n), etc.)?
- Teniendo números 1,2, ..., n, ¿cuántos árboles BST podemos tener que sean árboles completos?
#include
usando el espacio de nombres estándar;
int main ()
{
int t, n, i, max_so_far;
//Casos de prueba
cin >> t;
mientras que (t–)
{
apilar s; / * Crear una pila * /
cin >> n;
int a [n];
para (int i = 0; i <n; i ++)
cin >> a [i];
/ * El elemento más a la derecha es siempre el líder * /
max_so_far = a [n-1];
s.push (a [n-1]);
para (int i = n-2; i> = 0; i–)
{
if (a [i]> max_so_far)
{
s.push (a [i]);
max_so_far = a [i];
}
}
// Pop los elementos e imprimirlos.
while (! s.empty ())
{
cout << s.top () << "";
s.pop ();
}
cout << endl;
}
devuelve 0;
}