LeetCode-3132. 找出与数组相加的整数 II

        本人算法萌新,为秋招找工作开始磨炼算法,算法题均用python实现,如果我有哪些地方做的有问题的,还请大家不吝赐教.

1.题干

给你两个整数数组 nums1nums2

nums1 中移除两个元素,并且所有其他元素都与变量 x 所表示的整数相加。如果 x 为负数,则表现为元素值的减少。

执行上述操作后,nums1nums2 相等 。当两个数组中包含相同的整数,并且这些整数出现的频次相同时,两个数组 相等

返回能够实现数组相等的 最小 整数 x

示例 1:

输入:nums1 = [4,20,16,12,8], nums2 = [14,18,10]

输出:-2

解释:

移除 nums1 中下标为 [0,4] 的两个元素,并且每个元素与 -2 相加后,nums1 变为 [18,14,10] ,与 nums2 相等。

示例 2:

输入:nums1 = [3,5,5,3], nums2 = [7,7]

输出:2

解释:

移除 nums1 中下标为 [0,3] 的两个元素,并且每个元素与 2 相加后,nums1 变为 [7,7] ,与 nums2 相等。

提示:

  • 3 <= nums1.length <= 200
  • nums2.length == nums1.length - 2
  • 0 <= nums1[i], nums2[i] <= 1000
  • 测试用例以这样的方式生成:存在一个整数 xnums1 中的每个元素都与 x 相加后,再移除两个元素,nums1 可以与 nums2 相等。

2.思考

        最开始的想法,是找到数组1和数组2之间差值的规律,就是想维护两个差值数组,找到需要排除掉的元素之后,再进行计算,后来没成功,选择了维护两个数组的下标进行暴力模拟遍历,思路如代码中的注释.

3.代码

from typing import List


class Solution:
    def minimumAddedInteger(self, nums1: List[int], nums2: List[int]) -> int:
        nums1.sort(reverse=True)
        nums2.sort(reverse=True)
        n1, index1, n2, index2 = len(nums1), 1, len(nums2), 1
        skip, skip_count = 0, 0
        # 循环边界
        while index1 < n1 and index2 < n2:
            # 计算首个元素的差值
            dif = nums2[0] - nums1[skip_count]
            # 比较之后元素的差值
            dif_now = nums2[index2] - nums1[index1]
            # 差值相等 继续往下遍历
            if dif_now == dif:
                index1 += 1
                index2 += 1
            # 差值不等
            else:
                # 跳过nums1当前的元素
                index1 += 1
                # 跳过次数+1
                skip += 1
                # 当跳过次数超限时
                if skip > 2:
                    # 从头开始 nums2回到首个元素
                    index2 = 0
                    # 从头开始次数+1
                    skip_count += 1
                    # 跳过nums1的首元素
                    index1 = skip_count
                    # 跳过次数等于从头开始次数
                    skip = skip_count
        # 如果有一方走到最后 计算结果
        if index1 == n1 or index2 == n2:
            return nums2[index2 - 1] - nums1[index1 - 1]


if __name__ == "__main__":
    solution = Solution()
    nums1 = [3, 0, 3, 5, 3]
    nums2 = [10, 10, 10]
    print(solution.minimumAddedInteger(nums1, nums2))

4.总结

        感觉应该有其他的解法,后续看题解继续学习.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值