Create Maximum Number LeetCode solution in C++

1
class Solution {
2
public:
3
vector<int> maxArray(vector<int> &nums, int k) {
4
int n = nums.size();
5
stack<int> seen;
6
for (int i = 0; i < n; i++) {
7
int right = n - i - 1;
8
while (not seen.empty() and seen.top() < nums[i] and right + seen.size() >= k) seen.pop();
9
if (seen.size() < k) seen.push(nums[i]);
10
}
11
vector<int> res(k, 0);
12
for (int i = res.size() - 1; i >= 0; i--) {
13
res[i] = seen.top();
14
seen.pop();
15
}
16
return res;
17
}
18
bool greater(vector<int> &arr1, int i, vector<int> &arr2, int j) {
19
for (; i < arr1.size() and j < arr2.size(); i++, j++) {
20
if (arr1[i] == arr2[j]) continue;
21
return arr1[i] > arr2[j];
22
}
23
return i != arr1.size();
24
}
25
vector<int> merge(vector<int> &arr1, vector<int> &arr2) {
26
vector<int> res(arr1.size() + arr2.size());
27
for (int ind = 0, i = 0, j = 0; ind < res.size(); ind++) {
28
if (greater(arr1, i, arr2, j)) {
29
res[ind] = arr1[i];
30
i++;
31
} else {
32
res[ind] = arr2[j];
33
j++;
34
}
35
}
36
return res;
37
}
38
vector<int> maxNumber(vector<int> &nums1, vector<int> &nums2, int k) {
39
int m = nums1.size(), n = nums2.size();
40
vector<int> ans;
41
for (int len1 = max(0, k - n); len1 <= min(m, k); len1++) {
42
int len2 = k - len1;
43
vector<int> arr1 = maxArray(nums1, len1);
44
vector<int> arr2 = maxArray(nums2, len2);
45
vector<int> temp_res = merge(arr1, arr2);
46
if (greater(temp_res, 0, ans, 0)) {
47
ans.resize(temp_res.size());
48
for (int i = 0; i < temp_res.size(); i++) {
49
ans[i] = temp_res[i];
50
}
51
}
52
}
53
return ans;
54
}
55
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0