最接近的三数之和

文章描述了一个使用Python实现的算法,该算法通过排序、双指针和固定一个数的方法寻找数组中三个数的和最接近目标值的解。在遍历过程中,算法考虑了重复值的处理,比较和更新当前最接近目标值的和,并根据和与目标值的关系调整指针位置。
摘要由CSDN通过智能技术生成

今天又刷了一道题,分享下解题思路,顺便多做几遍加强印象。

1,思路和三数之和相近,固定一个数后双指针根据与target距离移动

2,先把第一个数出现的重复值的情况跳过

3,判断移动后的和与移动前的和哪个与target更近,取更近的数

4,如果出现和与target相等的情况就直接返回target

5,在没有找到准确答案前,根据规则移动两个指针

注意点:

res初始取值不能是固定值,比如0,

要考虑res与数列nums的距离,当res是nums里的任意三个数的和就不会距离太远,就不会造成res与target距离的误判

from typing import List

class Solution:

def threeSumClosest(self, nums: List[int], target: int) -> int:

nums.sort()

# print(nums)

n = len(nums)

res = nums[0] + nums[1] + nums[2]

for i in range(n - 2):

if i > 0 and nums[i] == nums[i - 1]:

continue

j, k = i + 1, n - 1

while j < k:

num = nums[i] + nums[j] + nums[k]

if abs(num - target) < abs(res - target):

res = num

if num - target == 0:

return target

if num > target:

k -= 1

else:

j += 1

return res

if __name__ == '__main__':

nums = [-1, 2, 1, -4]

res = Solution().threeSumClosest(nums=nums, target=1)

print(res)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值