The task:
Given a pivot x, and a list lst, partition the list into three parts.
The first part contains all elements in lst that are less than x.
The second part contains all elements in lst that are equal to x.
The third part contains all elements in lst that are larger than x.
Ordering within a part can be arbitrary.For example, given x = 10 and lst = [9, 12, 3, 5, 14, 10, 10], one partition may be
[9, 3, 5, 10, 10, 12, 14]
.
My solution:
const createPartitionOf = (lst, pivot) => {
const lessLst = lst.filter(x => x < pivot);
const equalLst = lst.filter(x => x === pivot);
const largerLst = lst.filter(x => x > pivot);
return [...lessLst, ...equalLst, ...largerLst];
};
console.log(createPartitionOf([9, 12, 3, 5, 14, 10, 10], 10));
My solution2:
const createPartitionOf2 = (lst, pivot) => {
const lessLst = [];
const equalLst = [];
const largerLst = [];
for (let i = 0; i < lst.length; i++) {
if (lst[i] < pivot) {
lessLst.push(lst[i]);
} else if (lst[i] > pivot) {
largerLst.push(lst[i]);
} else {
equalLst.push(lst[i]);
}
}
return [...lessLst, ...equalLst, ...largerLst];
};
console.log(createPartitionOf2([9, 12, 3, 5, 14, 10, 10], 10));