Leetcode 题---------- 最接近的三数之和(python实现)

本文深入解析了LeetCode上经典题目“3Sum Closest”的解题策略,采用排序+双指针算法,详细阐述了如何在给定数组中找到三个整数,使其和最接近目标值,并提供了Python代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述:

给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。
链接:https://leetcode-cn.com/problems/3sum-closest

示例:

 

解题思路:排序 + 双指针
         指针i:指向数组头部
         指针j:指向数组尾部
         变量res: 存储最接近三数之和
         变量sum: 存储当前三数之和
         (1) 对数组排序 (从小到大);
         (2) 遍历数组nums;
            a. 为指针i,j 赋值;
            b. 不断移动指针,执行循环,直到i==j;
               - 求出当前三数之和赋值给sum;
               - 比较sum、res与target的距离:若当前三数之和更接近目标值。则更新res中存储的值;
               - 比较sum与target值的大小,判断如何移动指针:若sum大于target,向前移动指针j; 若小于,向后移动指针i;相等直接返回res;
          (3) 返回结果res;

代码实现:

 def threeSumClosest(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: int
        """
        # 排序
        nums.sort()
        n = len(nums)
        res = nums[0] + nums[1] + nums[2]
        for k in range(n) :
            i = k + 1
            j = n - 1
            while i < j :
                sum =  nums[k] + nums[i] + nums[j]
                if abs(sum - target) < abs(res - target) :
                    res = sum
                if sum > target :
                    j -= 1
                elif sum < target :
                    i += 1
                else :
                    return res
        return res

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值