classSolution: defminOperations(self, nums1: List[int], nums2: List[int]) -> int: if6 * len(nums1) < len(nums2) or6 * len(nums2) < len(nums1): return -1 d = sum(nums2) - sum(nums1) if d < 0: d = -d nums1, nums2 = nums2, nums1 ans = 0 cnt = Counter(6 - x for x in nums1) + Counter(6 - x for x in nums2) for i inrange(5, 0, -1): if i * cnt[i] >= d: return ans + (d + i - 1) // i ans += cnt[i] d -= i * cnt[i]
classSolution { public: intminOperations(vector<int>& nums1, vector<int>& nums2){ if (nums1.size() * 6 < nums2.size() || nums2.size() * 6 < nums1.size()){ return-1; } int d = sumVector_int(nums2) - sumVector_int(nums1); if (d < 0){ d = -d; vector<int> t; t = nums2; nums2 = nums1; nums1 = t; } int cnt[6]{}; for (int x: nums1) cnt[6 - x]++; for (int x: nums2) cnt[x - 1]++; int ans = 0; for (int i = 5; i > -1; i--){ if (i * cnt[i] >= d){ return ans + (d + i - 1) / i; } ans += cnt[i]; d -= i * cnt[i]; } return0; } intsumVector_int(vector<int>& nums){ int n = nums.size(); int result = 0; for (auto x: nums){ result += x; } return result; } };
funcminOperations(nums1 []int, nums2 []int)int { iflen(nums1) * 6 < len(nums2) || len(nums2) * 6 < len(nums1){ return-1 } d := SumNums(nums2) - SumNums(nums1) if d < 0{ d = -d nums1, nums2 = nums2, nums1 } //---------------------- // 记录最大变化量 cnt := make([]int, 6, 6) for _, x := range nums1{ cnt[6 - x]++ } for _, x := range nums2{ cnt[x - 1]++ } //----------------------- ans := 0 for i := 5; i > -1; i--{ if i * cnt[i] >= d{ return ans + (d + i - 1) / i } ans += cnt[i] d -= i * cnt[i] } return ans }
//---------------------------- // 数组元素和 funcSumNums(nums []int)int{ result := 0 for _, x := range nums{ result += x } return result } //----------------------------