数组反转算法问题 JavaScript 的解决方案

javascriptweb developmentobject oriented programming更新于 2025/10/3 1:16:17

我们有一个要求,我们必须编写一个函数来反转数组,但不改变数组中存在的特殊字符的索引,如下例所示 −

如果 ‘#’ 是该特殊字符,则以下数组,

[18,-4,'#',0,8,'#',5]

应该返回 −

[5, 8, "#", 0, -4, "#", 18],

这里,数字被反转,不包括 '#'保留其索引。

让我们为此编写代码。

我们将在这里使用双指针方法,起始和结束分别指向数组的最左边和最右边。

如果在任何索引处我们找到特殊字符,我们将跳过该索引并继续迭代,当我们找到没有特殊字符的索引对时,我们交换它们的值,并在起始指针小于右指针时继续执行此操作。

示例

const arr = [18,-4,'#',0,8,'#',5];
const reverseArray = (arr, special) => {
   let start = 0, end = arr.length - 1, temp;
   while(start < end){
      if(arr[start] === special){
         start++;
         continue;
      };
      if(arr[end] === special){
         end--;
         continue;
      };
      temp = arr[start];
      arr[start] = arr[end];
      arr[end] = temp;
      start++;
      end--;
   };
};
reverseArray(arr, '#');
console.log(arr);

输出

控制台中的输出将是 −

[
   5, 8, '#', 0, -4, '#', 18
]

相关文章


有用资源