Vincoli:Dato un array [a1b2c3d4] convertire in [abcd1234]
- O (1) spazio
- O (n) Tempo
E non è una questione compiti a casa solo una domanda interessante che ho trovato.
Ecco alcune soluzioni che potrei pensare, ma nulla che lo faccia in termini di vincoli.
Metodo 1
* Con O (n) * memoria
- Dividere la matrice in due parti in modo ricorsivo. (continuare a dividere fino alla dimensione < = 2 per ciascun sottotema)
- Ordinare ciascun sottotema con l'array prima e i numeri alla fine.
- unione sub problema matrici
Metodo 2
In O (n log n)
- ordinare l'array ordine lessicografico basato diventa 1234abcd
- Invertire entrambe le metà dell'array 4321dcba
- inverso l'intera stringa abcd1234
Metodo 3
Se è stato definito intervallo di numeri
Anche se il caso è che i numeri sono in un intervallo specifico allora posso inizializzare un int dì traccia = 0; E impostare il bit appropriato quando mi imbatto in un numero nell'array ad es. (1 < < a [2]). 1. Scambiare gli alfabeti nella prima metà dell'array 2. Contrassegnare i numeri nella variabile di traccia 3. Successivamente utilizzare la traccia per riempire la seconda metà dell'array.
Metodo 4 Siamo in grado di utilizzare il metodo 3 con HashMap se vogliamo rimuovere il vincolo della gamma di numeri interi, ma poi avrà bisogno di più memoria.
Non riesco a pensare ad un modo migliore per risolvere il problema generico in O (1) tempo e O (n) spazio.
Problema generico qui si riferisce a:
Data una sequenza di x1y1x2y2x3y3 .... XnYn dove x1, x2 sono alfabeti x1 < x2 < .... < xn e y1y2 ... yn sono interi.y1 y2 < < .... < yn Disporre l'output come x1x2 ... xny1y2 ... yn
Qualche suggerimento?
Hai bisogno di capire come riorganizzare 6 personaggi con non più di 8 azioni. (Ma le "azioni" possono essere multiple swap, se necessario, e mantenere comunque l'ordine N.) (E si noti che il problema, come lo hai affermato, non dice nulla sull'ordinamento, semplicemente riorganizzando 8 caratteri in una sequenza definita). –
@Hot Licks: Ho provato a pensare su queste righe, ma alla fine ho trovato una soluzione che non era generica. 1.Spostare gli elementi centrali della prima metà, ad es. "1b", così otteniamo ab12c3d4. 2. Scambia gli elementi centrali della seconda metà ab12cd34. 3. Scambia centro 2 elemento della matrice completa abcd1234. MA questa tecnica funziona solo se la dimensione della matrice è in multipli di 8. –
Definisci "generico" - non hai indicato un problema generico. Hai dato un esempio ma nessun suggerimento su come questo si generalizza. –