2

假设给了我一个字符串数组,

比如['f', 'r', 'i', 'e', 'n', 'd'],我的任务就是把它反转成['d', 'n', 'e', 'i', 'r', 'f'].

我写了以下 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--;
    }
};

所以我在 while 循环中一直使用的技巧是[a,b]=[b,a].

就空间复杂性而言,这有多有效?有没有更好的方法可以用 JS 编写?谢谢

4

2 回答 2

1

使用数组字面量和数组解构赋值

[s[h], s[t]] = [s[t], s[h]];

与使用临时变量一样节省空间和时间

const a = s[t], b = s[h];
s[h] = a;
s[t] = b;

但由于所有开销,在实际执行中可能会慢很多,至少在编译器优化数组创建之前。

无论哪种方式,您的reverseString方法都是O(n)(使用nbeing s.length)并且实际上不适用于字符串,而仅适用于数组。

于 2021-09-18T00:01:24.513 回答
0

您的实现是 n/2,因为您要遍历列表的一半。即使您的循环是 1/2n,它也会随着列表大小的增加而线性增加。因此你的实现是 O(n)

在javascript中反转列表的最有效方法的答案: 在Javascript中反转数组的最有效方法是什么?

于 2021-09-18T00:11:04.273 回答