Task5:最接近的三数之和

题目

给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。

例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.

与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).

解题:

class Solution:
    def threeSumClosest(self, nums: List[int], target: int) -> int:
        n=len(nums)
        if(not nums or n<3):  # 边界检测是否存在空列表或者长度小于3的列表
            return
        nums.sort()     # 列表排序
        min3 = abs(target)+sum(map(abs, nums))+1   # 最小值的处置给定需要考虑
        sum3 = 0
        for i in range(n):
            left=i+1    # 设置双指针,最左端和左右端(不包括最小数num[i])
            right=n-1
            while(left < right):
                sum3 = nums[i]+nums[left]+nums[right]-target
                if(sum3 == 0):
                    return target
                elif(sum3 > 0):   # 大于0,右端指针左移
                    if (abs(min3) > abs(sum3)):     # 只有当有更小值时才更新数值
                        min3 = sum3
                    right = right-1
                elif(sum3 < 0):    # 小于0,左端指针右移
                    if (abs(min3) > abs(sum3)):  # 只有当有更小值时才更新数值
                        min3 = sum3
                    left = left+1

        return min3+target
发布了5 篇原创文章 · 获赞 0 · 访问量 107

猜你喜欢

转载自blog.csdn.net/weixin_43535441/article/details/104686827