Skip to content

Commit 472087c

Browse files
refactor 321
1 parent 004d4c3 commit 472087c

File tree

1 file changed

+37
-33
lines changed
  • src/main/java/com/fishercoder/solutions

1 file changed

+37
-33
lines changed
Lines changed: 37 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package com.fishercoder.solutions;
22

33
/**
4+
* 321. Create Maximum Number
5+
*
46
* Given two arrays of length m and n with digits 0-9 representing two numbers.
57
* Create the maximum number of length k <= m + n from digits of the two.
68
* The relative order of the digits from the same array must be preserved.
@@ -25,47 +27,49 @@
2527
return [9, 8, 9]
2628
*/
2729
public class _321 {
28-
public int[] maxNumber(int[] nums1, int[] nums2, int k) {
29-
int n = nums1.length;
30-
int m = nums2.length;
31-
int[] ans = new int[k];
32-
for (int i = Math.max(0, k - m); i <= k && i <= n; ++i) {
33-
//what is this and why?
34-
int[] candidate = merge(maxArray(nums1, i), maxArray(nums2, k - i), k);
35-
if (greater(candidate, 0, ans, 0)) {
36-
ans = candidate;
30+
public static class Solution1 {
31+
public int[] maxNumber(int[] nums1, int[] nums2, int k) {
32+
int n = nums1.length;
33+
int m = nums2.length;
34+
int[] ans = new int[k];
35+
for (int i = Math.max(0, k - m); i <= k && i <= n; ++i) {
36+
//what is this and why?
37+
int[] candidate = merge(maxArray(nums1, i), maxArray(nums2, k - i), k);
38+
if (greater(candidate, 0, ans, 0)) {
39+
ans = candidate;
40+
}
3741
}
42+
return ans;
3843
}
39-
return ans;
40-
}
4144

42-
private boolean greater(int[] nums1, int i, int[] nums2, int j) {
43-
while (i < nums1.length && j < nums2.length && nums1[i] == nums2[j]) {
44-
i++;
45-
j++;
45+
private boolean greater(int[] nums1, int i, int[] nums2, int j) {
46+
while (i < nums1.length && j < nums2.length && nums1[i] == nums2[j]) {
47+
i++;
48+
j++;
49+
}
50+
return j == nums2.length || (i < nums1.length && nums1[i] > nums2[j]);
4651
}
47-
return j == nums2.length || (i < nums1.length && nums1[i] > nums2[j]);
48-
}
4952

50-
private int[] merge(int[] nums1, int[] nums2, int k) {
51-
int[] ans = new int[k];
52-
for (int i = 0, j = 0, r = 0; r < k; r++) {
53-
ans[r] = greater(nums1, i, nums2, j) ? nums1[i++] : nums2[j++];
53+
private int[] merge(int[] nums1, int[] nums2, int k) {
54+
int[] ans = new int[k];
55+
for (int i = 0, j = 0, r = 0; r < k; r++) {
56+
ans[r] = greater(nums1, i, nums2, j) ? nums1[i++] : nums2[j++];
57+
}
58+
return ans;
5459
}
55-
return ans;
56-
}
5760

58-
private int[] maxArray(int[] nums, int k) {
59-
int n = nums.length;
60-
int[] ans = new int[k];
61-
for (int i = 0, j = 0; i < n; i++) {
62-
while (n - i + j > k && j > 0 && ans[j - 1] < nums[i]) {
63-
j--;
64-
}
65-
if (j < k) {
66-
ans[j++] = nums[i];
61+
private int[] maxArray(int[] nums, int k) {
62+
int n = nums.length;
63+
int[] ans = new int[k];
64+
for (int i = 0, j = 0; i < n; i++) {
65+
while (n - i + j > k && j > 0 && ans[j - 1] < nums[i]) {
66+
j--;
67+
}
68+
if (j < k) {
69+
ans[j++] = nums[i];
70+
}
6771
}
72+
return ans;
6873
}
69-
return ans;
7074
}
7175
}

0 commit comments

Comments
 (0)