在 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 次浏览

开启您的 职业生涯

通过完成课程获得认证

开始
广告