leetcode

Solution to some Leetcode problems written in C++
git clone git://git.dimitrijedobrota.com/leetcode.git
Log | Files | Refs | README | LICENSE

1775.cpp (1463B)


0 class Solution { 1 public: 2 int minOperations(vector<int> &nums1, vector<int> &nums2) const { 3 int n = size(nums1), m = size(nums2); 4 if (6 * n < m || 6 * m < n) return -1; 5 6 const int s1 = accumulate(begin(nums1), end(nums1), 0); 7 const int s2 = accumulate(begin(nums2), end(nums2), 0); 8 9 if (s1 > s2) swap(nums1, nums2), swap(n, m); 10 11 make_heap(begin(nums1), end(nums1), greater<int>()); 12 make_heap(begin(nums2), end(nums2), less<int>()); 13 14 int goal = abs(s1 - s2), res = 0; 15 while (goal > 0 && !empty(nums1) && !empty(nums2)) { 16 res++; 17 if (6 - nums1.front() > nums2.front() - 1) { 18 goal -= 6 - nums1.front(); 19 pop_heap(begin(nums1), end(nums1), greater<int>()); 20 nums1.pop_back(); 21 } else { 22 goal -= nums2.front() - 1; 23 pop_heap(begin(nums2), end(nums2), less<int>()); 24 nums2.pop_back(); 25 } 26 } 27 28 while (goal > 0 && !empty(nums1)) { 29 goal -= 6 - nums1.front(); 30 pop_heap(begin(nums1), end(nums1), greater<int>()); 31 nums1.pop_back(); 32 res++; 33 } 34 35 while (goal > 0 && !empty(nums2)) { 36 goal -= nums2.front() - 1; 37 pop_heap(begin(nums2), end(nums2), less<int>()); 38 nums2.pop_back(); 39 res++; 40 } 41 42 return goal <= 0 ? res : -1; 43 } 44 };