题干描述
给你两个长度相等的数组 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
相等。
题干分析
输入与目标
- 我们有两个等长数组nums1和nums2。
- 需要找到一个 整数x使得nums1[i]+x==nums2[i]对于每个i成立。
- 这以为着我们需要调整nums1中每个元素,使其nums2对应元素相等。
思路分析
- 如果我们对nums1中的每个元素都加上相同的x,使得它们与nums2对应元素相等,意味着nums2[i]-nums1[i] = x。
- 因为nums1和nums2相等时,相同元素的出现次数也应该一致,所以x可以是任意一个nums2[i]-nums1[i]。
- 由于题目没有给出明确条件,所以可以通过简单计算差值来找到x。
代码思路解释
- 首先,找到nums1和nums2的最大值。
- 因为我们需要加上一个整数使数组,计算这两个最大值的差值即可得到x。
- 代码中,maxVal1和maxVal2分别计算nums1和nums2的最大值。
- 最终返回maxVal2-maxVal1作为结果。
完整代码如下
#include <stdio.h>
//定一个函数用于计算两个数组nums1和nums2需要加的整数x使它们相等
int addedInteger(int* nums1, int nums1Size, int* nums2, int nums2Size) {
int maxVal1 = 0, maxVal2 = 0;
for (int i = 0; i < nums1Size; i++)
{
maxVal1 = (maxVal1 > nums1[i]) ? maxVal1 : nums1[i]; // 计算 nums1 的最大值
}
for (int i = 0; i < nums2Size; i++)
{
maxVal2 = (maxVal2 > nums2[i]) ? maxVal2 : nums2[i];//计算nums2的最大值
}
return maxVal2 - maxVal1;
}
int main() {
int nums1[] = { 1, 2, 3 };
int nums2[] = { 4, 5, 6 };
int size = sizeof(nums1) / sizeof(nums1[0]);
int result = addedInteger(nums1, size, nums2, size);
printf("The integer x is: %d\n", result);
return 0;
}