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


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

如果“#”是特殊字符,那么以下数组,

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

应返回 −

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

这里,数字反转,不包括保持其索引的“#”。

我们来写一下这段代码。

我们将在其中使用双指针方法,start 和 end 分别指向数组的最左侧和最右侧。

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

示例

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
]

更新于:2020-08-24

164 次浏览

开启 事业

完成课程以获得认证

开始
广告