力扣刷题之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 相等。

题干分析

输入与目标

  • 我们有两个等长数组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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值