首页 > 编程语言 >吴师兄学算法day07 双指针 16. 最接近的三数之和

吴师兄学算法day07 双指针 16. 最接近的三数之和

时间:2024-01-16 21:33:40浏览次数:32  
标签:tmp right target nums 三数 16 day07 ret res

题目:16. 最接近的三数之和

易错点:

  • 比较的时候,要减去target 在算结果

我的代码:

class Solution:
    def threeSumClosest(self, nums: List[int], target: int) -> int:
        nums = sorted(nums)
        max_res = float('inf')
        min_res = float('-inf')
        for i in range(len(nums)):
            left = i + 1
            right = len(nums) - 1
            while left < right:
                cur_buy = nums[i] + nums[left] + nums[right] # 2 目标是 1
                if cur_buy - target  < 0 :  # 说明目前购买的不够4 10
                    min_res = max(min_res,cur_buy)
                    left += 1  # 多加一个
                if cur_buy- target  > 0:  # 说明买多了
                    max_res = min(max_res, cur_buy)   # 取小的
                    right -= 1  # 减去一个
                if cur_buy == target:  # 正好买到了
                    return target
        # 返回更接近的那个
        if abs(max_res - target) > abs(min_res-target):
            return min_res
        else:
            return max_res

大神的代码:

class Solution:
    def threeSumClosest(self, nums, target):
        ret = float('inf')
        nums.sort()
        length = len(nums)
        for i in range(length - 2):
            left = i + 1
            right = length - 1
            while left < right:
                tmp = nums[i] + nums[left] + nums[right]
                # 如果新计算的tmp更靠近target 就更新为tmp
                # 否则就继续用原来的ret
                ret = tmp if abs(tmp - target) < abs(ret - target) else ret
                
                if tmp == target:
                    return target
                if tmp > target:
                    right -= 1
                else:
                    left += 1
        return ret

作者:清风Python
链接:https://leetcode.cn/problems/3sum-closest/solutions/758394/16zui-jie-jin-de-san-shu-zhi-he-pythonsh-ujl9/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

扩展写法:

总结:

  • 大神跟我写的差不多,重点是要理解这句话:ret = tmp if abs(tmp - target) < abs(ret - target) else ret
  • 我的思路还可以。
  • 继续加油!!!!
  • 我可以的!!

参考:

清风Python 题解

标签:tmp,right,target,nums,三数,16,day07,ret,res
From: https://www.cnblogs.com/liqi175/p/17968600

相关文章

  • 2024.1.16做题纪要
    硬币多少有些人类智慧了。。。。。题解写的还行。具体就是每次把当前这一位代表的质数\(i\)向后每隔\(i\)个数除上\(i\)。这一位肯定是一个质数,因为若是合数则前面一定会被除上质数。Kaiserredux#include<bits/stdc++.h>longlongnum[1100000];longlonganswe......
  • 2024-1-16
    0这里是我的博客平台。接下来的博客时间将以学习编程为主题,多多关照。1学习编程的目标——学会编程,实在的插足新领域自夸。#include<stdio.h>intmain(void){charc;do{c=getchar();}while(c!='');printf("\a");printf("helloC\n");p......
  • 1.16寒假每日总结7
     对接口的参数进行合法性校验。  如果不符合参数校验,会报错,但是不合符接口文档要求,所以要进行异常处理 ......
  • C++学习日记 2024-1-16
    开始学习C++几天了,之前没有记录,从现在开始,记录一下学习过程复习与回忆:1.引用与指针共同优点:只用引用与指针,在传递参数时,可以减少拷贝,减少内存消耗,提高效率指针优点:指针比引用更强大,所有引用能做的事,指针都能做,指针缺点:危险,指针可以为空,指针指向地址,同一地址可以......
  • 2024.1.16
    写些不知道写在哪的东西。看了一下THUSC2023Day1T1。有一个长度为\(n\)的序列,\(q\)次操作,形如区间加和询问区间内至少几次区间±1使得区间内所有数等于\(x\)结论是把区间两边接上\(x\),答案是差分序列的绝对值之和除以\(2\)是这样的,考虑区间加在差分序列上的改变,即为一......
  • 2024.1.16日报
    今天继续学习spark,不过今天有些特殊,因为有些同学回来了,大伙在一起交流了一下总体上考研的居多,所以自己也有些犹豫到底是要考研还是就业,需要深入的思考一下 总结:RDD是一个数据集的表示,不仅表示了数据集,还表示了这个数据集从哪来,如何计算,主要属性包括:分区列表计算函数依赖关系......
  • Solution Set【2024.1.16】
    A.硬币首先根据周长最大的要求不难发现我们实际上要求的是\(n^2+1\)的最小质因子,记作\(f_n\),通过观察可以发现若对于个\(t\),满足存在\(p\)使得\[p\midt^2+1\]那么对于所有\(k\ge0\),一定有\[p\mid\left(t+k\cdotp\right)^2+1\]因此我们可以维护一个序......
  • 2024-01-16-recall
    想起一些非常久的事情Subtitle:2024-01-16recallCreated:2024-01-16T18:52+08:00Published:2024-01-16T20:08+08:00Categories:EssayTags:Diary可能是看书的影响,也可能是前天被我妈嘱咐要吃好点(至于为什么是前天,检查日历和身份证),也可能是看了某公众号的文章,晚上(凌晨)醒......
  • 16_Java基础-包
    包机制包=文件夹语法格式:packagepkg1[.pkg2[.pkg3…]];一般利用公司域名倒置作为包名:com.baidu.www域名:www.baidu.com为了能够使用一个包的成员,需要在Java中导入该包,用“import”完成importpackge1*(通配符):导入这个包下所有的类!推荐《阿里巴巴开发......
  • P6667 [清华集训2016] 如何优雅地求和
    P6667[清华集训2016]如何优雅地求和Problem给定最高次幂为\(x^{m}\)的多项式函数\(g(x)\)和整数\(n,q\),其中\(g\)以点值形式给出,即给定\(g(0),g(1),\dots,g(m)\)。求:\[\begin{aligned}Q(g,n,q)=\sum\limits_{k=0}^{n}g(k)\binom{n}{k}q^{k}(1-q)^{n-k......