Description


Submission
class Solution {
public:
int minOperations(vector<int>& nums1, vector<int>& nums2) {
int sum1 = accumulate(nums1.begin(), nums1.end(), 0);
int sum2 = accumulate(nums2.begin(), nums2.end(), 0);
if(sum1 < sum2) {
swap(nums1, nums2);
swap(sum1, sum2);
}
int gap = sum1 - sum2;
int n = nums1.size(), m = nums2.size();
sort(nums1.begin(), nums1.end(), greater<int>());
sort(nums2.begin(), nums2.end());
int i = 0, j = 0, ret = 0;
for(; i < n && j < m && gap > 0; ++ret) {
int gap1 = nums1[i] - 1;
int gap2 = 6 - nums2[j];
if(gap1 > gap2) {
gap -= gap1;
++i;
} else {
gap -= gap2;
++j;
}
}
if(gap <= 0) return ret;
if(i == n) {
for( ; j < m && gap > 0; ++j, ++ret) gap -= 6 - nums2[j];
} else {
for( ; i < n && gap > 0; ++i, ++ret) gap -= nums1[i] - 1;
}
if(gap <= 0) return ret;
return -1;
}
};

Bucket sort will make a faster solution.