Given a list of numbers with only 3 unique numbers (1, 2, 3), sort the list in O(n) time.
Example
Input: [3, 3, 2, 1, 3, 2, 1]
Output: [1, 1, 2, 2, 3, 3, 3]
Challenge
Try sorting the list using constant space.Solution
function a(l) {
for (var el of l) {
if (typeof l1 === 'undefined') {
l1 = [el];
} else if (el === l1[0]) {
l1.push(el);
} else if (typeof l2 === 'undefined') {
l2 = [el];
} else if (el === l2[0]) {
l2.push(el);
} else if (typeof l3 === 'undefined') {
l3 = [el];
} else if (el === l3[0]) {
l3.push(el);
}
}
if (l1[0] < l2[0]) {
if (l1[0] < l3[0]) {
if (l2[0] < l3[0]){
var l0 = l1.concat(l2).concat(l3);
} else {
var l0 = l1.concat(l3).concat(l2);
}
} else {
var l0 = l3.concat(l1).concat(l2);
}
} else {
if(l1[0] < l3[0]) { // l2 < l1 < l3
var l0 = l2.concat(l1).concat(l3);
} else if(l2[0] < l3[0]) { // l2 < l3 <l1
var l0 = l2.concat(l3).concat(l1);
} else { // l3 < l2 < l1
var l0 = l3.concat(l2).concat(l1);
}
}
return l0
}
console.log(a([1,2,3,2,2,3,1,1,3]));
// console.log(a([1,3,2,2,2,3,1,1,3]));
// console.log(a([2,3,1,2,2,3,1,1,3]));
// console.log(a([2,1,3,2,2,3,1,1,3]));
// console.log(a([3,2,1,2,2,3,1,1,3]));
// console.log(a([3,1,2,2,2,3,1,1,3]));
Comments
Post a Comment