陣列反轉演算法問題的 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 ]
廣告