Supongamos que me dieron una serie de cadenas de caracteres,
como ['f', 'r', 'i', 'e', 'n', 'd'] , y mi tarea es invertirlo en ['d', 'n', 'e', 'i', 'r', 'f'] .
Escribí el siguiente JavaScript
var reverseString = function(s) { let h=0; let t= s.length-1; while (h<t) { [s[h], s[t]] = [s[t], s[h]]; h++; t--; } }; Entonces, el truco que sigo usando en el ciclo while es [a,b]=[b,a] .
¿Qué tan eficiente es esto en términos de complejidad espacial? ¿Hay una mejor manera de escribir esto en JS? Gracias
Uso de un literal de matriz y una asignación de desestructuración de matriz
[s[h], s[t]] = [s[t], s[h]];es exactamente tan eficiente en espacio y tiempo como el uso de variables temporales
const a = s[t], b = s[h]; s[h] = a; s[t] = b;pero probablemente un poco más lento en la ejecución real debido a toda la sobrecarga, al menos hasta que el compilador optimice la creación de la matriz.
De cualquier manera, su método reverseString es O(n) (siendo n s.length ) y en realidad no funciona para cadenas sino solo para matrices.
Su implementación es n/2 ya que está recorriendo la mitad de la lista. Aunque su ciclo es 1/2n, aumenta de forma lineal a medida que aumenta el tamaño de la lista. Por lo tanto, su implementación es O(n)
La respuesta a la forma más eficiente de revertir una lista en javascript: ¿Cuál es la forma más eficiente de revertir una matriz en Javascript?