forked from AnasImloul/Leetcode-Solutions
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCreate Maximum Number.js
34 lines (32 loc) · 919 Bytes
/
Create Maximum Number.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
// Runtime: 6038 ms (Top 9.09%) | Memory: 48.9 MB (Top 27.27%)
const maxNumber = (a, b, k) => {
let m = a.length, n = b.length;
let res = [];
for (let i = Math.max(0, k - n); i <= Math.min(k, m); i++) {
let maxA = maxArray(a, i), maxB = maxArray(b, k - i);
let merge = mergeArray(maxA, maxB);
if (merge > res) res = merge;
}
return res;
};
const maxArray = (a, k) => {
let drop = a.length - k, res = [];
for (const x of a) {
while (drop > 0 && res.length && res[res.length - 1] < x) {
res.pop();
drop--;
}
res.push(x);
}
if (res.length >= k) {
res = res.slice(0, k);
} else {
res = res.concat(Array(k - res.length).fill(0));
}
return res;
};
const mergeArray = (a, b) => {
let res = [];
while (a.length + b.length) res.push(a > b ? a.shift() : b.shift())
return res;
};