1 找出与数组相加的整数 I
题目描述:
数组 nums1
中的每个元素都与变量 x
所表示的整数相加。如果 x
为负数,则表现为元素值的减少。
在与 x
相加后,nums1
和 nums2
相等 。当两个数组中包含相同的整数,并且这些整数出现的频次相同时,两个数组 相等 。
返回整数 x
。
数据约束:
数组大小 $n \le 100$;数据大小 $0 \le a_i \le 1000$。
解题思路:
数据范围很小,基本随便暴力。既然数据是定制化的,那么将两个数组排序后,下标相同的位置必然是一一对应的。再取一个特殊情况,两个数组的最小值,也是对应关系。那么答案就是这两个最小值的差值。
复杂度:时间复杂度 $O(n)$,空间复杂度 $O(1)$。
2 找出与数组相加的整数 II
题目描述:
给你两个整数数组 nums1
和 nums2
。
从 nums1
中移除两个元素,并且所有其他元素都与变量 x
所表示的整数相加。如果 x
为负数,则表现为元素值的减少。
执行上述操作后,nums1
和 nums2
相等 。当两个数组中包含相同的整数,并且这些整数出现的频次相同时,两个数组 相等 。
返回能够实现数组相等的 最小 整数 x
。
数据约束:
数组大小 $3 \le n \le 200$;数据大小 $0 \le a_i \le 1000$。
解题思路:
题目数组 1 要进行删减操作,而数组 2 并不需要。我们可以把题目反过来,在数组 2 上最大可以加多少,使其可以在数组 1 中找到与之对应的数(不重复)。答案范围肯定在 $-1000 \le ans \le 1000$,不妨对该区间的答案一一尝试,直到找到答案为止。
复杂度:时间复杂度 $O(\alpha n)$;空间复杂度 $O(\log n)$,维护每个数据出现的次数便于做比较。
3 数组最后一个元素的最小值
题目描述:
给你两个整数 n
和 x
。你需要构造一个长度为 n
的 正整数 数组 nums
,对于所有 0 <= i < n - 1
,满足 nums[i + 1]
大于 nums[i]
,并且数组 nums
中所有元素的按位 AND
运算结果为 x
。
返回 nums[n - 1]
可能的 最小 值。
数据约束:
$0 \le n, x \le 10^8$。
解题思路:
既然所有数据的按位与运算的结果要等于 $x$,那么所有数据在 $x$ 的比特位为 1 的位置上都必须为 1。那可以修改的空间就剩其余不是 1 的位置,抛去所有为 1 的位置,剩下位置进行填数,是数组严格递增。很明显,就是填 0,1,2,3,4……,直到填到 n – 1 为止。
那么做法就是,将 $n – 1$ 的二进制数嵌入到 $x$ 的二进制数不为 1 的地方。
复杂度:时间复杂度和空间复杂度都很小。