2018-12-30 19:05:56 +05:30
|
|
|
---
|
|
|
|
id: 5a23c84252665b21eecc802a
|
|
|
|
title: Stream Merge
|
|
|
|
challengeType: 5
|
2019-08-05 09:17:33 -07:00
|
|
|
forumTopicId: 302326
|
2021-01-13 03:31:00 +01:00
|
|
|
dashedName: stream-merge
|
2018-12-30 19:05:56 +05:30
|
|
|
---
|
|
|
|
|
2020-11-27 19:02:05 +01:00
|
|
|
# --description--
|
2019-07-18 17:32:12 +02:00
|
|
|
|
2018-12-30 19:05:56 +05:30
|
|
|
Write a function that takes multiple sorted arrays of items, and returns one array of sorted items.
|
2020-03-30 11:23:18 -05:00
|
|
|
|
2020-11-27 19:02:05 +01:00
|
|
|
# --hints--
|
2018-12-30 19:05:56 +05:30
|
|
|
|
2020-11-27 19:02:05 +01:00
|
|
|
`mergeLists` should be a function.
|
2020-03-30 11:23:18 -05:00
|
|
|
|
2020-11-27 19:02:05 +01:00
|
|
|
```js
|
|
|
|
assert(typeof mergeLists == 'function');
|
|
|
|
```
|
2018-12-30 19:05:56 +05:30
|
|
|
|
2020-11-27 19:02:05 +01:00
|
|
|
`mergeLists([[1, 3, 5, 9, 10], [2, 4, 6, 7, 8]])` should return an array.
|
2018-12-30 19:05:56 +05:30
|
|
|
|
2020-11-27 19:02:05 +01:00
|
|
|
```js
|
|
|
|
assert(
|
|
|
|
Array.isArray(
|
|
|
|
mergeLists([
|
|
|
|
[1, 3, 5, 9, 10],
|
|
|
|
[2, 4, 6, 7, 8]
|
|
|
|
])
|
|
|
|
)
|
|
|
|
);
|
|
|
|
```
|
2020-03-30 11:23:18 -05:00
|
|
|
|
2020-11-27 19:02:05 +01:00
|
|
|
`mergeLists([[1, 3, 5, 9, 10], [2, 4, 6, 7, 8]])` should return `[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]`.
|
2018-12-30 19:05:56 +05:30
|
|
|
|
2020-11-27 19:02:05 +01:00
|
|
|
```js
|
|
|
|
assert.deepEqual(
|
|
|
|
mergeLists([
|
|
|
|
[1, 3, 5, 9, 10],
|
|
|
|
[2, 4, 6, 7, 8]
|
|
|
|
]),
|
|
|
|
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
|
|
|
|
);
|
2018-12-30 19:05:56 +05:30
|
|
|
```
|
|
|
|
|
2020-11-27 19:02:05 +01:00
|
|
|
`mergeLists([[1, 4, 7, 10], [2, 5, 8, 11], [3, 6, 9, 12]])` should return `[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]`.
|
2018-12-30 19:05:56 +05:30
|
|
|
|
2020-11-27 19:02:05 +01:00
|
|
|
```js
|
|
|
|
assert.deepEqual(
|
|
|
|
mergeLists([
|
|
|
|
[1, 4, 7, 10],
|
|
|
|
[2, 5, 8, 11],
|
|
|
|
[3, 6, 9, 12]
|
|
|
|
]),
|
|
|
|
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
|
|
|
|
);
|
|
|
|
```
|
|
|
|
|
|
|
|
`mergeLists([[1, 3, 9, 14, 15, 17, 28], [7, 8, 14, 14, 23, 26, 28, 29, 30], [9, 23, 25, 29]])` should return `[1, 3, 7, 8, 9, 9, 14, 14, 14, 15, 17, 23, 23, 25, 26, 28, 28, 29, 29, 30]`.
|
2020-03-30 11:23:18 -05:00
|
|
|
|
2020-11-27 19:02:05 +01:00
|
|
|
```js
|
|
|
|
assert.deepEqual(
|
|
|
|
mergeLists([
|
|
|
|
[1, 3, 9, 14, 15, 17, 28],
|
|
|
|
[7, 8, 14, 14, 23, 26, 28, 29, 30],
|
|
|
|
[9, 23, 25, 29]
|
|
|
|
]),
|
|
|
|
[1, 3, 7, 8, 9, 9, 14, 14, 14, 15, 17, 23, 23, 25, 26, 28, 28, 29, 29, 30]
|
|
|
|
);
|
|
|
|
```
|
2019-07-18 17:32:12 +02:00
|
|
|
|
2020-11-27 19:02:05 +01:00
|
|
|
`mergeLists([[3, 14, 15], [2, 17, 18], [], [2, 3, 5, 7]])` should return `[2, 2, 3, 3, 5, 7, 14, 15, 17, 18]`.
|
2018-12-30 19:05:56 +05:30
|
|
|
|
|
|
|
```js
|
2020-11-27 19:02:05 +01:00
|
|
|
assert.deepEqual(mergeLists([[3, 14, 15], [2, 17, 18], [], [2, 3, 5, 7]]), [
|
|
|
|
2,
|
|
|
|
2,
|
|
|
|
3,
|
|
|
|
3,
|
|
|
|
5,
|
|
|
|
7,
|
|
|
|
14,
|
|
|
|
15,
|
|
|
|
17,
|
|
|
|
18
|
|
|
|
]);
|
|
|
|
```
|
2020-09-15 09:57:40 -07:00
|
|
|
|
2020-11-27 19:02:05 +01:00
|
|
|
`mergeLists([[1, 19, 1999], [17, 33, 2999, 3000], [8, 500, 3999]])` should return `[1, 8, 17, 19, 33, 500, 1999, 2999, 3000, 3999]`.
|
|
|
|
|
|
|
|
```js
|
|
|
|
assert.deepEqual(
|
|
|
|
mergeLists([
|
|
|
|
[1, 19, 1999],
|
|
|
|
[17, 33, 2999, 3000],
|
|
|
|
[8, 500, 3999]
|
|
|
|
]),
|
|
|
|
[1, 8, 17, 19, 33, 500, 1999, 2999, 3000, 3999]
|
|
|
|
);
|
2018-12-30 19:05:56 +05:30
|
|
|
```
|
|
|
|
|
2020-11-27 19:02:05 +01:00
|
|
|
# --seed--
|
2018-12-30 19:05:56 +05:30
|
|
|
|
2020-11-27 19:02:05 +01:00
|
|
|
## --seed-contents--
|
2020-03-30 11:23:18 -05:00
|
|
|
|
2020-11-27 19:02:05 +01:00
|
|
|
```js
|
|
|
|
function mergeLists(lists) {
|
|
|
|
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
# --solutions--
|
2018-12-30 19:05:56 +05:30
|
|
|
|
|
|
|
```js
|
2019-03-10 19:14:48 +09:00
|
|
|
function mergeLists(lists) {
|
2020-03-30 11:23:18 -05:00
|
|
|
function merge(l1, l2) {
|
|
|
|
var result = [],
|
|
|
|
i = 0,
|
|
|
|
j = 0;
|
2018-12-30 19:05:56 +05:30
|
|
|
while (l1.length && l2.length) {
|
2020-03-30 11:23:18 -05:00
|
|
|
if (l1[i] <= l2[j]) {
|
2018-12-30 19:05:56 +05:30
|
|
|
result.push(l1.shift());
|
2020-03-30 11:23:18 -05:00
|
|
|
} else {
|
2018-12-30 19:05:56 +05:30
|
|
|
result.push(l2.shift());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
result.push.apply(result, l1);
|
|
|
|
result.push.apply(result, l2);
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
2020-03-30 11:23:18 -05:00
|
|
|
var result = lists[0];
|
2018-12-30 19:05:56 +05:30
|
|
|
for (var i = 1; i < lists.length; i++) {
|
2020-03-30 11:23:18 -05:00
|
|
|
result = merge(result, lists[i]);
|
2018-12-30 19:05:56 +05:30
|
|
|
}
|
|
|
|
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
```
|