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;6
int sum1 = 0, sum2 = 0;7
for (int i : nums1) sum1 += i;8
for (int i : nums2) sum2 += i;10
int diff = sum1 - sum2;11
if (diff == 0) return 0;13
return (diff > 0 ? helper(nums1, nums2, diff) : helper(nums2, nums1, -diff));16
private int helper(int[] nums1, int[] nums2, int diff) {17
// count[i] : frequency of numbers that can reduce the diff by i18
int[] count = new int[6];19
for (int num : nums1) count[num - 1]++;20
for (int num : nums2) count[6 - num]++;23
for (int i = 5; i > 0; i--) {24
int c = Math.min(count[i], diff / i + (diff % i == 0 ? 0 : 1));