leetcodeSolution 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;
6 const int s1 = accumulate(begin(nums1), end(nums1), 0);
7 const int s2 = accumulate(begin(nums2), end(nums2), 0);
9 if (s1 > s2) swap(nums1, nums2), swap(n, m);
11 make_heap(begin(nums1), end(nums1), greater<int>());
12 make_heap(begin(nums2), end(nums2), less<int>());
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 }
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 }
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 }
42 return goal <= 0 ? res : -1;
43 }
44 };