陣列反轉演算法問題的 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 次瀏覽

開啟 事業

完成課程以獲得認證

開始
廣告