Con "
memoria come un vincolo", allora non avrei nemmeno andare a fare una HashSet (che, per quanto ne so anche rimuovere le corde duplicati nella lista originale) perché sarete utilizzando la struttura aggiuntiva di un HashSet che prende un po 'di memoria.
L'ordinamento, non migliorerebbe l'utilizzo della memoria.
Vorrei utilizzare l'elenco originale (che è già presente, quindi non verrà utilizzata memoria aggiuntiva) + una variabile intera di 3 byte per iterare l'elenco. 3 byte possono iterare su una lista di 2^24 = 16777216 stringhe
Con "memoria come un vincolo" Vorrei andare per 2 cicli for. Penso che uno pseudocodice C-Like sarà più facile da capire che il mio semplice inglese.
Note:
- Dall'esempio fornito in questione, non è in realtà un elenco ma una matrice, quindi opererà sulla struttura come se fosse un array
- La questione non è chiaro se abbinare questo "abc", "def", "cba", "abc". Accoppierò il primo "abc" con "cba" e anche quel "cba" con "il secondo" abc "(l'intenzione non è chiara nella domanda)
- Suppongo che non possiamo modificare l'elenco originale
Qui è il minimo codice memoria consumo posso pensare:
// "list" holds the original list (array)
for (int i = 0; i < length(list) - 1; i++) {
for (int j = i + 1; j < length(list); j++) {
if (list[i] == reverse(list[j])) {
print(list[i] + " reversed is " list[j])
}
}
}
quanto riguarda l'utilizzo della memoria, questa soluzione avrà 2 variabili intere (solitamente 4 byte ciascuno) + lista originale, che presumo noi non può sbarazzarsi di.
Per quanto riguarda la CPU usag e (in realtà, non rilevante in base alla domanda), la quantità di volte in cui le stringhe verranno invertite sarà: (N * (N + 1))/2 dove N è la lunghezza della lista
fonte
2011-09-29 23:52:58
On re -la lettura non è chiaro se si desidera trovare tutte le stringhe che sono inverse di altre nella stessa lista, o, data una stringa, trovare una stringa nella lista che è il suo contrario. Quest'ultimo, ovviamente, è un semplice problema di ricerca, dopo aver invertito la stringa data. –
Anche se sono d'accordo con Daniel su questo, considerando MEMORY come un vincolo, non sarebbe affatto importante. –
@DanielRHicks Ho modificato la mia domanda .... intendeva che per tutte le stringhe nell'elenco trovi se esiste un suo contrario ... –