Easy

题目描述

给你两个长度相等的数组 nums1nums2

nums1 中的每个元素都增加了一个整数(如果是负数则为减少),用变量 x 表示。

结果,nums1 变得等于 nums2。当两个数组包含相同频次的相同整数时,认为它们相等。

返回整数 x

示例 1:

输入:nums1 = [2,6,4], nums2 = [9,7,5]
输出:3
解释:nums1 的每个元素都增加了 3。

示例 2:

输入:nums1 = [10], nums2 = [5]
输出:-5
解释:nums1 的每个元素都增加了 -5。

示例 3:

输入:nums1 = [1,1,1,1], nums2 = [1,1,1,1]
输出:0
解释:nums1 的每个元素都增加了 0。

约束:

  • 1 <= nums1.length == nums2.length <= 100
  • 0 <= nums1[i], nums2[i] <= 1000
  • 测试用例保证存在整数 x,使得 nums1 的每个元素都加上 x 后能等于 nums2

提示:

  • 注意,对两个数组排序后,每个元素之间应该有一对一的对应关系。
  • 因此 x = min(nums2) - min(nums1)

解题思路

这道题的关键在于理解题目条件:nums1 中的每个元素都加上了相同的整数 x 后变成 nums2,且两个数组包含相同频次的相同整数。

思路分析

根据题目描述,我们知道存在一个整数 x,使得对 nums1 中每个元素加上 x 后得到的数组与 nums2 相等(元素相同且频次相同)。

方法一:直接计算差值 由于每个元素都加了相同的值,我们可以直接用任意一对对应元素的差值来计算 x。最简单的方法是使用第一个元素:x = nums2[0] - nums1[0]

方法二:使用最小值(推荐) 根据提示,更稳妥的方法是使用最小值:x = min(nums2) - min(nums1)。这种方法在逻辑上更清晰,因为排序后的对应关系是确定的。

方法三:使用排序验证 可以先对两个数组排序,然后计算对应位置元素的差值,所有差值应该相等。

由于题目保证解的存在性,方法一和方法二都能得到正确答案。考虑到代码简洁性,推荐使用方法一。

代码实现

class Solution {
public:
    int addedInteger(vector<int>& nums1, vector<int>& nums2) {
        return nums2[0] - nums1[0];
    }
};
class Solution:
    def addedInteger(self, nums1: List[int], nums2: List[int]) -> int:
        return nums2[0] - nums1[0]
public class Solution {
    public int AddedInteger(int[] nums1, int[] nums2) {
        return nums2[0] - nums1[0];
    }
}
var addedInteger = function(nums1, nums2) {
    return nums2[0] - nums1[0];
};

复杂度分析

解法时间复杂度空间复杂度
直接计算差值O(1)O(1)
使用最小值O(n)O(1)
排序验证O(n log n)O(1)