1775. Equal Sum Arrays With Minimum Number of Operations (Medium) - TengnanYao/daily_leetcode GitHub Wiki

class Solution(object):
    def minOperations(self, nums1, nums2):
        """
        :type nums1: List[int]
        :type nums2: List[int]
        :rtype: int
        """
        # O(n) greedy
        c1, c2 = collections.Counter(nums1), collections.Counter(nums2)
        s1, s2 = sum([k * v for k, v in c1.items()]), sum([k * v for k, v in c2.items()])
        if s1 < s2:
            s1, s2, c1, c2 = s2, s1, c2, c1
        diff = s1 - s2
        result = 0
        for i in range(1, 6):
            j = 7 - i
            s = (c1[j] + c2[i]) * (j - 1)
            if s >= diff:
                return result + (diff - 1) // (j - 1) + 1
            diff -= s
            result += (c1[j] + c2[i])
        return -1