JavaScript中恰好三个唯一重复元素的排序数组

假设我们有一个Numbers数组,其中包含恰好三个元素的任何频率-像这样的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
]