Problems › TypeScript › patterns
Merge two sorted queues
A worker pulls from two queues that are each already sorted, and must hand downstream one combined sorted stream.
- Each input is already sorted ascending.
- The result merges them ascending, and equal values from both queues both survive.
- An empty queue on either side is fine; the other side comes through whole.
mergeSorted(first: list<int>, second: list<int>) → list<int>
Where you start
function mergeSorted(first: number[], second: number[]): number[] {
}
Worked examples
| Call | Result |
|---|---|
mergeSorted([1,2,4], [1,3]) | [1,1,2,3,4] |
mergeSorted([], [1,2]) | [1,2] |
mergeSorted([1,2], []) | [1,2] |
mergeSorted([], []) | [] |
Hint
Two pointers, one for each list. Take the smaller head, advance that pointer, and when one side runs out the rest of the other side follows.
Reference solution in TypeScript
function mergeSorted(first: number[], second: number[]): number[] {
const merged: number[] = [];
let i = 0;
let j = 0;
while (i < first.length && j < second.length) {
if (first[i] <= second[j]) merged.push(first[i++]);
else merged.push(second[j++]);
}
while (i < first.length) merged.push(first[i++]);
while (j < second.length) merged.push(second[j++]);
return merged;
}