【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 

posted @ 2024-08-09 10:06  TICSMC  阅读(6)  评论(0)    收藏  举报