-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCreateMaximumNumber.cc
More file actions
75 lines (64 loc) · 1.78 KB
/
Copy pathCreateMaximumNumber.cc
File metadata and controls
75 lines (64 loc) · 1.78 KB
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#include <math.h>
#include <sstream>
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
class Solution {
public:
vector<int> maxNumber(vector<int> &nums1, vector<int> &nums2, int k) {
vector<int> answer;
const int start = max(k - nums2.size(), 0);
const int end = min(nums1.size(), k);
for (int i = start; i <= end; i++) {
vector<int> res1;
res1.clear();
vector<int> res2;
res2.clear();
solve(nums1, i, res1);
solve(nums2, k - i, res2);
vector<int> res;
res.clear();
int pos1 = 0, pos2 = 0, tpos = 0;
while (pos1 < res1.size() || pos2 < res2.size()) {
const int para =
compare(res1, pos1, res2, pos2) ? res1[pos1++] : res2[pos2++];
res.push_back(para);
}
if (!compare(ans, 0, res, 0)) {
answer.clear();
for (int i = 0; i < k; ++i) {
answer.push_back(res[i]);
}
}
}
return answer;
}
bool compare(vector<int> &nums1, int start1, vector<int> &nums2, int start2) {
for (; start1 < nums1.size() && start2 < nums2.size(); start1++, start2++) {
if (nums1[start1] > nums2[start2])
return true;
if (nums1[start1] < nums2[start2])
return false;
}
return start1 != nums1.size();
}
void solve(vector<int> &nums, int k, vector<int> &res) {
int len = 0;
for (int i = 0; i < nums.size(); i++) {
while (len > 0 && len + nums.size() - i > k && res[len - 1] < nums[i]) {
len--;
}
if (len < k)
res.push_back(nums[i]);
}
return res;
}
};
int main(int argc, char const *argv[]) {
/* code */
return 0;
}