2
public int[] maxNumber(int[] nums1, int[] nums2, int k) {4
for (int i = Math.max(0, k - nums2.length);5
i <= Math.min(nums1.length, k);6
i++) { // try all possible lengths from each seq7
String one = solve(nums1, i); // find the best seq matching len of i8
String two = solve(nums2, k - i); // len of k-i9
StringBuilder sb = new StringBuilder();11
while (a < i || b < k - i) { // merge it to the max13
one.substring(a).compareTo(two.substring(b)) >= 0 ? one.charAt(a++) : two.charAt(b++));15
if (sb.toString().compareTo(ans) > 0) { // if better, we replace.19
int[] res = new int[k];20
for (int i = 0; i < k; ++i) {21
res[i] = ans.charAt(i) - '0';26
private String solve(int[] arr, int k) {27
Deque<Integer> stack = new ArrayDeque<>();28
for (int i = 0; i < arr.length; ++i) {29
while (!stack.isEmpty() && arr.length - i + stack.size() > k && stack.peek() < arr[i]) {34
StringBuilder sb = new StringBuilder();35
for (int i = 0; i < k; i++) {36
sb.append(stack.pollLast());