【Leetcode】3132-1620
前言
跟昨天的每日一题是基本一致的,难度不算太高。本质也算是没什么内涵的题目
思路
因为题目说明了nums2只比nums1少两个元素,那么也就是说,对于nums2中一定是全部对应的,而其中最小的nums2是对应nums1中最小三个中的某一个。
如果我们得到了对应的关系,那么此时两个数组间元素的增加/减小值是确定了。
此时就是确定得到对应的关系是否是正确的。利用排序后双指针。如果nums2中每个元素都与nums1中元素对应,那么此时就表明这个元素增加/减小是可行的。
因此枚举初始的对应关系之后再判断此对应关系是否合理即可。只需要枚举三次即可。算法的时间复杂度为\(O(n \text{log }n +3n)=O(n \text{log }n)\)
class Solution:
def minimumAddedInteger(self, nums1: List[int], nums2: List[int]) -> int:
"""
由于nums1 只比nums2 多两个元素
因此只需要判断最小的三个与nums2进行对比即可
"""
nums1.sort()
nums2.sort()
l1, l2 = len(nums1), len(nums2)
ans = +inf
for s in range(3): # 枚举其对齐的位置
i, j = s, 0
t = nums2[j] - nums1[i]
while i < l1 and j < l2:
if nums2[j] - nums1[i] == t:
j += 1
i += 1
if j == l2:
ans = min(ans, t)
return ans

浙公网安备 33010602011771号