¡Convertir una array de números enteros en forma de Zig-Zag!

Desarrollemos un poco más el problema. Básicamente, se nos da una array de números enteros y debemos organizar esta array en un orden tal que el primer elemento sea menor que el segundo elemento, el segundo elemento sea mayor que el tercer elemento, el tercer elemento sea menor que el cuarto elemento, el cuarto elemento sea mayor que 5to elemento, y así sucesivamente. En resumen, el orden de los elementos en la array en zig-zag de salida sería [1° < 2° > 3° < 4° > 5° < 6° > 7°]. Por lo tanto, si la array de entrada dada es [4, 3, 7, 8, 6, 2, 1], una de las disposiciones en la array en zig-zag sería [3, 7, 4, 8, 2, 6, 1] .

Algunos puntos que vale la pena mencionar aquí antes de proceder a pensar cómo resolverlo de manera eficiente. Para empezar, supongamos que todos los elementos de la array de entrada son únicos, es decir, los números enteros no se repiten. Luego podemos incluir enteros repetidos también y extender el problema/solución. Al principio, encontrar un problema de array en zig-zag parece similar a la clasificación, pero debe tenerse en cuenta que no es una clasificación estricta. Significa que este problema puede tener múltiples salidas, es decir, para la misma array de entrada, se pueden encontrar múltiples arrays en zig-zag, es decir, más de una solución. Otro punto a tener en cuenta es que la array en zig-zag podría ser [1º > 2º < 3º > 4º < 5º > 6º < 7º]. Básicamente, lo que importa es la relación en zig-zag de menor que (<) y mayor que (<) en la salida, no el orden de inicio de los dos primeros elementos. Básicamente, un zig-zag es /\/\/\/\/\/ o \/\/\/\/\/\. Dado que organizar una array en zig-zag es similar a ordenar, ¡este es el primer enfoque que se me ocurre! Por lo tanto, primero podemos ordenar la array en orden creciente y luego podemos comenzar a intercambiar elementos (excluyendo el primer elemento). Entendámoslo con un ejemplo. La array de entrada es [4, 3, 7, 8, 6, 2, 1]. La array ordenada sería [1, 2, 3, 4, 6, 7, 8]. Y si intercambia los elementos 2 y 3, intercambia los elementos 4 y 5, intercambia los elementos 6 y 7, la array en zig-zag de salida sería [1, 3, 2, 6, 4, 8, 7]. Aquí podemos ver {1 < 3 > 2 < 6 > 4 < 8 > 7}. Dado que la complejidad temporal de la clasificación es O(nlogn), este enfoque de conversión en zig-zag da como resultado O(nlogn). Veamos si podemos mejorar aquí, es decir, si realmente se requiere una primera clasificación. Dado que organizar una array en zig-zag es similar a ordenar, ¡este es el primer enfoque que se me ocurre! Por lo tanto, primero podemos ordenar la array en orden creciente y luego podemos comenzar a intercambiar elementos (excluyendo el primer elemento). Entendámoslo con un ejemplo. La array de entrada es [4, 3, 7, 8, 6, 2, 1]. La array ordenada sería [1, 2, 3, 4, 6, 7, 8]. Y si intercambia los elementos 2 y 3, intercambia los elementos 4 y 5, intercambia los elementos 6 y 7, la array en zig-zag de salida sería [1, 3, 2, 6, 4, 8, 7]. Aquí podemos ver {1 < 3 > 2 < 6 > 4 < 8 > 7}. Dado que la complejidad temporal de la clasificación es O(nlogn), este enfoque de conversión en zig-zag da como resultado O(nlogn). Veamos si podemos mejorar aquí, es decir, si realmente se requiere una primera clasificación. Dado que organizar una array en zig-zag es similar a ordenar, ¡este es el primer enfoque que se me ocurre! Por lo tanto, primero podemos ordenar la array en orden creciente y luego podemos comenzar a intercambiar elementos (excluyendo el primer elemento). Entendámoslo con un ejemplo. La array de entrada es [4, 3, 7, 8, 6, 2, 1]. La array ordenada sería [1, 2, 3, 4, 6, 7, 8]. Y si intercambia los elementos 2 y 3, intercambia los elementos 4 y 5, intercambia los elementos 6 y 7, la array en zig-zag de salida sería [1, 3, 2, 6, 4, 8, 7]. Aquí podemos ver {1 < 3 > 2 < 6 > 4 < 8 > 7}. Dado que la complejidad temporal de la clasificación es O(nlogn), este enfoque de conversión en zig-zag da como resultado O(nlogn). Veamos si podemos mejorar aquí, es decir, si realmente se requiere una primera clasificación. este es el primer enfoque que viene a la mente! Por lo tanto, primero podemos ordenar la array en orden creciente y luego podemos comenzar a intercambiar elementos (excluyendo el primer elemento). Entendámoslo con un ejemplo. La array de entrada es [4, 3, 7, 8, 6, 2, 1]. La array ordenada sería [1, 2, 3, 4, 6, 7, 8]. Y si intercambia los elementos 2 y 3, intercambia los elementos 4 y 5, intercambia los elementos 6 y 7, la array en zig-zag de salida sería [1, 3, 2, 6, 4, 8, 7]. Aquí podemos ver {1 < 3 > 2 < 6 > 4 < 8 > 7}. Dado que la complejidad temporal de la clasificación es O(nlogn), este enfoque de conversión en zig-zag da como resultado O(nlogn). Veamos si podemos mejorar aquí, es decir, si realmente se requiere una primera clasificación. este es el primer enfoque que viene a la mente! Por lo tanto, primero podemos ordenar la array en orden creciente y luego podemos comenzar a intercambiar elementos (excluyendo el primer elemento). Entendámoslo con un ejemplo. La array de entrada es [4, 3, 7, 8, 6, 2, 1]. La array ordenada sería [1, 2, 3, 4, 6, 7, 8]. Y si intercambia los elementos 2 y 3, intercambia los elementos 4 y 5, intercambia los elementos 6 y 7, la array en zig-zag de salida sería [1, 3, 2, 6, 4, 8, 7]. Aquí podemos ver {1 < 3 > 2 < 6 > 4 < 8 > 7}. Dado que la complejidad temporal de la clasificación es O(nlogn), este enfoque de conversión en zig-zag da como resultado O(nlogn). Veamos si podemos mejorar aquí, es decir, si realmente se requiere una primera clasificación. Entendámoslo con un ejemplo. La array de entrada es [4, 3, 7, 8, 6, 2, 1]. La array ordenada sería [1, 2, 3, 4, 6, 7, 8]. Y si intercambia los elementos 2 y 3, intercambia los elementos 4 y 5, intercambia los elementos 6 y 7, la array en zig-zag de salida sería [1, 3, 2, 6, 4, 8, 7]. Aquí podemos ver {1 < 3 > 2 < 6 > 4 < 8 > 7}. Dado que la complejidad temporal de la clasificación es O(nlogn), este enfoque de conversión en zig-zag da como resultado O(nlogn). Veamos si podemos mejorar aquí, es decir, si realmente se requiere una primera clasificación. Entendámoslo con un ejemplo. La array de entrada es [4, 3, 7, 8, 6, 2, 1]. La array ordenada sería [1, 2, 3, 4, 6, 7, 8]. Y si intercambia los elementos 2 y 3, intercambia los elementos 4 y 5, intercambia los elementos 6 y 7, la array en zig-zag de salida sería [1, 3, 2, 6, 4, 8, 7]. Aquí podemos ver {1 < 3 > 2 < 6 > 4 < 8 > 7}. Dado que la complejidad temporal de la clasificación es O(nlogn), este enfoque de conversión en zig-zag da como resultado O(nlogn). Veamos si podemos mejorar aquí, es decir, si realmente se requiere una primera clasificación. Dado que la complejidad temporal de la clasificación es O(nlogn), este enfoque de conversión en zig-zag da como resultado O(nlogn). Veamos si podemos mejorar aquí, es decir, si realmente se requiere una primera clasificación. Dado que la complejidad temporal de la clasificación es O(nlogn), este enfoque de conversión en zig-zag da como resultado O(nlogn). Veamos si podemos mejorar aquí, es decir, si realmente se requiere una primera clasificación.

Si pensamos un poco más, notamos que el intercambio de elementos en pares solo puede dar como resultado una array en zig-zag. En realidad, necesitamos atravesar la array solo una vez. Mientras recorremos la array, podemos establecer el orden requerido (es decir, < o >) intercambiando los elementos si ya no están en el orden requerido. Para lograr esto en un programa, mantengamos una bandera para representar qué orden (es decir, < o >) se necesita. Si los dos elementos actuales no están en ese orden, intercambie esos elementos, de lo contrario no. Profundicemos en cómo funciona esto. Supongamos que estamos procesando B y C actualmente y la relación actual es ‘<‘ pero tenemos B > C en la entrada [ABC] – Dado que la relación actual es ‘<‘, significa que la relación anterior sería ‘>’. Entonces, la relación es A > B y B > C. Podemos deducir A > C. Entonces, si intercambiamos B y C, entonces la relación es A > C y C < B. Finalmente obtuvimos el orden deseado, es decir, [A < C > B]. Dado que estamos atravesando la array solo una vez, la complejidad del tiempo es O (n)

Consulte esto para la implementación de C++.

Este artículo es una contribución de Siva Krishna Aleti. Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 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 *