数组反转算法问题的 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 ]
广告