假设我们有一个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 ]