restricciones:Dado un array [a1b2c3d4] convertir a [abcd1234]
- O (1) espacio
- O (n) Tiempo de
No es una pregunta tarea simplemente una pregunta interesante que encontré
Aquí hay algunas soluciones que podría pensar pero nada que lo haga en determinadas limitaciones.
Método 1
* Con O (n) de memoria *
- Divide la matriz en dos partes de forma recursiva. (siga dividiendo hasta el tamaño < = 2 para cada problema secundario)
- Primero ordene cada problema secundario con el conjunto y los números al final.
- fusionar los arrays de problemas sub
Método 2
En O (n log n) Tiempo de
- ordenar la matriz orden lexicográfico base se convierte en 1234abcd
- Invierta ambas mitades de la matriz 4321dcba
- Reverse toda la abcd1234 cadena
Método 3
Si se definió rango de números de
Además, si el caso era que los números están en un rango específico entonces puedo inicializar un int decir track = 0; Y configure el bit apropiado cuando me encuentre con un número en la matriz por ej. (1 < < a [2]). 1. Cambie los alfabetos a la primera mitad de la matriz 2. Marque los números en la variable de seguimiento 3. Luego use la pista para completar la segunda mitad de la matriz.
Método 4 Podemos utilizar Método 3 con HashMap si queremos eliminar la restricción de la gama de enteros, pero entonces necesitará más memoria.
No se puede pensar en una mejor manera de resolver el problema genérico en O (1) tiempo y O (n) espacio.
problema genérico que aquí se refiere a:
Dada una secuencia de x1y1x2y2x3y3 .... XnYn donde x1, x2 son alfabetos x1 x2 < < .... < xn y Y1Y2 ... yn son enteros.y1 y2 < < .... < in Organizar la salida como X1X2 ... xny1y2 ... yn
¿Alguna sugerencia?
Debe averiguar cómo reorganizar 6 caracteres con no más de 8 acciones. (Pero las "acciones" pueden ser intercambios múltiples, si es necesario, y aún así mantener el orden N.) (Y tenga en cuenta que el problema, como usted lo dijo, no dice nada sobre la clasificación, simplemente reorganiza 8 caracteres en una secuencia definida). –
@Hot Licks: intenté pensar en estas líneas, pero terminé con una solución que no era genérica. 1.Pulse los elementos centrales de la primera mitad, por ejemplo, "1b", de modo que obtengamos ab12c3d4. 2. Cambie los elementos centrales de la segunda mitad ab12cd34. 3. Intercambia el elemento del centro 2 de la matriz completa abcd1234. PERO esta técnica solo funciona si el tamaño de la matriz está en múltiplos de 8. –
Defina "genérico": no ha indicado un problema genérico. Has dado un ejemplo, pero no hay indicios de cómo se generaliza. –