在 JavaScript 中對恰好包含三個唯一重複元素的陣列進行排序


假設我們有一個數字陣列,其中包含任何頻率的恰好三個元素 - 1、0 和 1,如下所示 −

const arr = [1, 1, 0, -1, 1, 0, -1, 1, 0, 0, 1];

我們需要編寫一個 JavaScript 函式,該函式接受一個這樣的陣列。該函式應直接對這個特殊陣列進行排序,即,不使用任何額外的陣列來儲存值。

唯一的條件是我們的函式應該是一個線性時間函式(僅使用一次迭代)。

示例

以下為程式碼 −

const arr = [1, 1, 0, -1, 1, 0, -1, 1, 0, 0, 1];
const sortSpecialArray = (arr = []) => {
   const swap = (a, b) => {
      let middle = arr[a]
      arr[a] = arr[b]
      arr[b] = middle
   };
   let left = 0;
   let middle = 0;
   let right = arr.length-1;
   while(middle <= right){
      if(arr[middle] === -1){
         swap(left++, middle++);
      }else if(arr[middle] === 0){
         middle++;
      }else if(arr[middle] === 1){
         swap(right--, middle);
      }
   };
};
sortSpecialArray(arr);
console.log(arr);

輸出

以下為控制檯輸出 −

[
   -1, -1, 0, 0, 0,
   0, 1, 1, 1, 1,
   1
]

更新時間: 2021-01-18

220 次瀏覽

開啟您的 職業生涯

透過完成課程獲得認證

開始
廣告
© . All rights reserved.