Dada una matriz sin clasificar, ¿cómo podemos asignar cada valor al primer valor que viene después y es más grande (o asignar a -1 si no existe ese número)?

Esta es una pregunta de entrevista frecuente sobre matrices. El algoritmo usa Stack para obtener el siguiente elemento mayor para cada elemento de la matriz. Mira esto. Fácil explicación del algoritmo en O (n) complejidad de tiempo.

Algoritmo 1 (ingenuo):

Para cada elemento, repita los elementos de la matriz a la derecha para encontrar el primer elemento que sea mayor que el elemento actual.

Si se alcanza el final de la matriz, el siguiente elemento mayor para el elemento actual es nulo.

Complejidad de tiempo: O (n ^ 2)

Complejidad espacial: O (1)

Algoritmo 2 (Optimizado):

Atraviesa la matriz una vez.

1: Si la pila está vacía o la matriz [i] es menor que stack.top, empuje la matriz [i] en la pila.

2: Si bien la matriz [i] es mayor que stack.top, Pop elemento superior e imprime ‘Siguiente elemento superior de la parte superior es matriz [i]’.

3: Empuje la matriz [i] en la pila.

4: Repita los pasos 2-3 hasta llegar al final de la matriz.

5: Finalmente, imprima nulo como siguiente elemento mayor para todos los elementos restantes de la pila.

Complejidad de tiempo: O (n)

Complejidad espacial: O (n)

Créditos: IDeserve

Puede hacer esto en [math] \ Theta (n) [/ math] usando una pila. Verifique el siguiente elemento mayor.

Este problema se puede resolver mediante el uso de una pila y en un solo recorrido transversal.

Pasos:

1. Si la pila está vacía o el elemento actual es más pequeño que el elemento superior de la pila, presione el elemento actual en la pila.

2. Si el elemento actual es mayor que el elemento superior de la pila, entonces este es el siguiente elemento mayor del elemento superior. Mantenga los elementos emergentes de la pila hasta que se encuentre un elemento más grande que el elemento actual en la pila o hasta que la pila se vacíe. Empuje el elemento actual en la pila.

3. Repita los pasos 1 y 2 hasta llegar al final de la matriz.

4. Finalmente, extraiga los elementos restantes de la pila e imprima nulos para ellos.

La Complejidad del Tiempo es O (n) porque cada elemento se empuja 1 vez y se saca 1 vez de la pila.

La complejidad espacial es O (n)

Fuente: siguiente elemento mayor en una matriz

Consulte el enlace anterior para ver el código, la visualización de algoritmos y ejemplos.

Espero que esto ayude.

More Interesting

¿Cuáles son algunas buenas preguntas para la entrevista sobre Linux IPC?

¿Qué preguntas de entrevista debo esperar para un puesto en Java y OpenStack?

¿El uso de matrices en 2-d para problemas que podrían resolverse mediante listas enlazadas o mapas de hash mal visto en las entrevistas? ¿El uso de matrices 2-d tiene contras?

¿Cuál es el propósito de la pregunta 'cuál fue su error más difícil' en las entrevistas para puestos de ingeniería de software?

¿Se "preparan" los entrevistadores para entrevistar candidatos?

¿Cómo puede un entrevistador seleccionar un programador haciendo algunas preguntas técnicas? El candidato puede ser mejor codificando que respondiendo las preguntas.

¿Cuál es la mejor manera de prepararse para una entrevista de PM PM en una empresa de tecnología?

¿Cuáles son los tipos de preguntas basadas en MapReduce que se hacen durante las entrevistas en Google?

Cómo medir la calidad del código

¿Cuáles son las preguntas formuladas durante las entrevistas de colocación?

¿Alguien puede proporcionar un buen algoritmo para resolver esto con una complejidad lineal de tiempo?

¿Cuáles son las preguntas difíciles de programación (codificación) formuladas en la entrevista?

¿Cuáles son algunas preguntas de la entrevista formuladas por Flipkart, Amazon y Google?

¿Cómo se le ocurre a la gente un algoritmo eficiente con baja complejidad de tiempo y espacio durante una entrevista?

¿Cómo debo comenzar a prepararme para entrevistas SDET (Ingeniero de desarrollo de software en pruebas) para empresas de productos como Flipkart, Amazon, etc.?