在 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 ]
广告
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP