3131.找出与数组相加的整数 I

目标

给你两个长度相等的数组 nums1 和 nums2。

数组 nums1 中的每个元素都与变量 x 所表示的整数相加。如果 x 为负数,则表现为元素值的减少。

在与 x 相加后,nums1 和 nums2 相等 。当两个数组中包含相同的整数,并且这些整数出现的频次相同时,两个数组 相等 。

返回整数 x 。

示例 1:

输入:nums1 = [2,6,4], nums2 = [9,7,5]
输出:3
解释:与 3 相加后,nums1 和 nums2 相等。

示例 2:

输入:nums1 = [10], nums2 = [5]
输出:-5
解释:与 -5 相加后,nums1 和 nums2 相等。

示例 3:

输入:nums1 = [1,1,1,1], nums2 = [1,1,1,1]
输出:0
解释:与 0 相加后,nums1 和 nums2 相等。

说明:

  • 1 <= nums1.length == nums2.length <= 100
  • 0 <= nums1[i], nums2[i] <= 1000
  • 测试用例以这样的方式生成:存在一个整数 x,使得 nums1 中的每个元素都与 x 相加后,nums1 与 nums2 相等。

思路

有两个整数数组 nums1nums2nums1 中的每个元素加上 x 之后可以通过调整元素位置得到 nums2,求 x

nums1nums2 的映射为双射,即单射和满射。为了求 x 我们只需要找到 nums1nums2 的最大值或最小值即可。

还有网友对两个数组求和,相减后再除以数组长度,不过需要注意数据溢出、数据类型的问题。

代码


/**
 * @date 2024-08-08 9:11
 */
public class AddedInteger3131 {

    public int addedInteger(int[] nums1, int[] nums2) {
        int n = nums1.length;
        int max1 = nums1[0];
        int max2 = nums2[0];
        for (int i = 1; i < n; i++) {
            if (max1 < nums1[i]) {
                max1 = nums1[i];
            }
            if (max2 < nums2[i]) {
                max2 = nums2[i];
            }
        }
        return max2 - max1;
    }
}

性能

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注