目录

3132:找出与数组相加的整数 II(1620 分)

力扣第 395 场周赛第 2 题

题目

给你两个整数数组 nums1nums2

nums1 中移除两个元素,并且所有其他元素都与变量 x 所表示的整数相加。如果 x 为负数,则表现为元素值的减少。

执行上述操作后,nums1nums2 相等 。当两个数组中包含相同的整数,并且这些整数出现的频次相同时,两个数组 相等

返回能够实现数组相等的 最小 整数 x

示例 1:

输入:nums1 = [4,20,16,12,8], nums2 = [14,18,10]

输出:-2

解释:

移除 nums1 中下标为 [0,4] 的两个元素,并且每个元素与 -2 相加后,nums1 变为 [18,14,10] ,与 nums2 相等。

示例 2:

输入:nums1 = [3,5,5,3], nums2 = [7,7]

输出:2

解释:

移除 nums1 中下标为 [0,3] 的两个元素,并且每个元素与 2 相加后,nums1 变为 [7,7] ,与 nums2 相等。

提示:

  • 3 <= nums1.length <= 200
  • nums2.length == nums1.length - 2
  • 0 <= nums1[i], nums2[i] <= 1000
  • 测试用例以这样的方式生成:存在一个整数 xnums1 中的每个元素都与 x 相加后,再移除两个元素,nums1 可以与 nums2 相等。

分析

  • 3131 进阶版,要删去两个数
  • nums2 最小的数所对应的 nums1 中的数便有三种情况,即最小的三个数之一
  • 遍历这三个数,判断对应的 x 是否符合即可

解答

1
2
3
4
5
6
7
8
class Solution:
    def minimumAddedInteger(self, nums1: List[int], nums2: List[int]) -> int:
        ct1,ct2 = Counter(nums1),Counter(nums2)
        mi = min(nums2)
        for a in nsmallest(3,nums1)[::-1]:
            x = mi-a
            if all(ct1[b-x]>=ct2[b] for b in ct2):
                return x

47 ms