• 1775. 通过最少操作次数使数组的和相等


    给你两个长度可能不等的整数数组 nums1 和 nums2 。两个数组中的所有值都在 1 到 6 之间(包含 1 和 6)。

    每次操作中,你可以选择 任意 数组中的任意一个整数,将它变成 1 到 6 之间 任意 的值(包含 1 和 6)。

    请你返回使 nums1 中所有数的和与 nums2 中所有数的和相等的最少操作次数。如果无法使两个数组的和相等,请返回 -1 。

    示例 1:

    输入:nums1 = [1,2,3,4,5,6], nums2 = [1,1,2,2,2,2]
    输出:3
    解释:你可以通过 3 次操作使 nums1 中所有数的和与 nums2 中所有数的和相等。以下数组下标都从 0 开始。
    - 将 nums2[0] 变为 6 。 nums1 = [1,2,3,4,5,6], nums2 = [6,1,2,2,2,2] 。
    - 将 nums1[5] 变为 1 。 nums1 = [1,2,3,4,5,1], nums2 = [6,1,2,2,2,2] 。
    - 将 nums1[2] 变为 2 。 nums1 = [1,2,2,4,5,1], nums2 = [6,1,2,2,2,2] 。
    

    示例 2:

    输入:nums1 = [1,1,1,1,1,1,1], nums2 = [6]
    输出:-1
    解释:没有办法减少 nums1 的和或者增加 nums2 的和使二者相等。
    

    示例 3:

    输入:nums1 = [6,6], nums2 = [1]
    输出:3
    解释:你可以通过 3 次操作使 nums1 中所有数的和与 nums2 中所有数的和相等。以下数组下标都从 0 开始。
    - 将 nums1[0] 变为 2 。 nums1 = [2,6], nums2 = [1] 。
    - 将 nums1[1] 变为 2 。 nums1 = [2,2], nums2 = [1] 。
    - 将 nums2[0] 变为 4 。 nums1 = [2,2], nums2 = [4] 。
    

    提示:

    • 1 <= nums1.length, nums2.length <= 105
    • 1 <= nums1[i], nums2[i] <= 6

    很好的一道贪心题目

    class Solution:
        def minOperations(self, nums1: List[int], nums2: List[int]) -> int:
            sum1=sum(nums1)
            sum2=sum(nums2)
            n1=len(nums1)
            n2=len(nums2)
            if sum1==sum2:
                return 0
            if min(n1,n2)*6<max(n1,n2)*1:
                return -1
            res=0
            if sum1>sum2:
                return self.minOperations(nums2,nums1)
            nums1.sort()
            nums2.sort()
            nums2.reverse()
            i=0
            j=0
            while sum1!=sum2:
                gap=sum2-sum1
                diff1=0 if i==n1 else 6-nums1[i]
                diff2=0 if j==n2 else nums2[j]-1
                d=min(gap,max(diff1,diff2))
                if diff1>diff2:
                    i+=1
                    sum1+=d
                else:
                    j+=1
                    sum2-=d
                res+=1
            return res  
  • 相关阅读:
    destoon代码从头到尾捋一遍
    php中foreach()函数与Array数组经典案例讲解
    刷题比赛
    #Math
    福慧双修(both)
    NOIP17提高模拟训练18 长途旅行(travel)
    NOIP提高组模拟训练18 正确答案(answer)
    NOIP17提高组模拟赛17 -乐曲创作(music)
    #2017 Multi-University Training Contest
    CodeForces
  • 原文地址:https://www.cnblogs.com/xxxsans/p/14486059.html
Copyright © 2020-2023  润新知