Equal Sum Arrays With Minimum Number of Operations LeetCode solution in Java

1
class Solution {
2
public int minOperations(int[] nums1, int[] nums2) {
3
int m = nums1.length, n = nums2.length;
4
if (m > 6 * n || n > 6 * m) return -1;
5

6
int sum1 = 0, sum2 = 0;
7
for (int i : nums1) sum1 += i;
8
for (int i : nums2) sum2 += i;
9

10
int diff = sum1 - sum2;
11
if (diff == 0) return 0;
12

13
return (diff > 0 ? helper(nums1, nums2, diff) : helper(nums2, nums1, -diff));
14
}
15

16
private int helper(int[] nums1, int[] nums2, int diff) {
17
// count[i] : frequency of numbers that can reduce the diff by i
18
int[] count = new int[6];
19
for (int num : nums1) count[num - 1]++;
20
for (int num : nums2) count[6 - num]++;
21

22
int res = 0;
23
for (int i = 5; i > 0; i--) {
24
int c = Math.min(count[i], diff / i + (diff % i == 0 ? 0 : 1));
25

26
res += c;
27
diff -= c * i;
28

29
if (diff <= 0) break;
30
}
31
return res;
32
}
33
}

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0