javascript - 如何在一个简单的数组上实现空间 trim

标签 javascript arrays algorithm pseudocode mutable

这更像是一道伪代码题。 假设我们有一个 char 数组,其中每个值都是一个字母或一个空格。我们需要实现的是一种用单个空格替换任何空格序列的算法。

例子:

数组:

['a', 'b', ' ', ' ', ' ', 'b', 'c', ' ']

应该变成:

['a', 'b', ' ', 'b', 'c', ' ']

这个算法应该只修改给定的数组,而不是在临时数组或类似的东西中使用。更改数组的唯一方法是通过索引设置项目(不能使用任何奇特的数组函数,如 arr.remove(0, 2),只能使用 arr[i] = b )。 O(n) 有解决方案吗?

任何能够回答这些限制的伪代码或真正的编程语言解决方案都是好的。

最佳答案

除了用于迭代数组的普通索引 i 之外,您还可以使用另一个索引,此处为 l 用于为最后一个有效字符保留最后一个新索引。如果实际上没有空间或最后一个索引处没有可用空间,则会发生值的移动并增加最后一个索引。

在数组内部增加索引i

最后调整数组长度为l

 i    l    0  1  2  3  4  5  6  7
--   --   -----------------------
           a  b  _  _  _  b  c  _
 0    0    a
 1    1    a  b
 2    2    a  b  _
 3    2    a  b  _
 4    2    a  b  _
 5    3    a  b  _  b
 6    4    a  b  _  b  c
 7    5    a  b  _  b  c  _

var array = ['a', 'b', ' ', ' ', ' ', 'b', 'c', ' '],
    i = 0,
    l = 0;
    
while (i < array.length) {
    if (array[i] !== ' ' || array[l - 1] !== ' ') {
        array[l] = array[i];
        l++;
    }
    i++;
}

array.length = l;

console.log(array);

关于javascript - 如何在一个简单的数组上实现空间 trim ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52726754/

相关文章:

javascript - 如何在 Typescript 项目中正确导入命名空间?

javascript - 无法使用命名空间和 javascript 解析 Xml

Javascript 'console' 无限循环

javascript - 将对象中的所有数组合并为一个数组。

algorithm - 计算所有双音路径

r - 为什么实际的世代数与 R 中的遗传算法不一样

javascript - 使用 Promises 响应来自 Node.js 的请求

java - java中二维数组的顺序打乱

arrays - 如何检查是否单击了二维数组的任何按钮?

java - 需要帮助逆向工程算法