leetcode16. 最接近的三数之和

news2024/9/26 1:28:11

给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。

返回这三个数的和。

假定每组输入只存在恰好一个解。

示例 1:

输入:nums = [-1,2,1,-4], target = 1 输出:2 解释:与 target 最接近的和是 2 (-1 + 2 +1 = 2) 。

一开始参考评论写的代码,使用了三个指针 a a a, b b b, c c c

  • 其中我们需要保证 a > b > c a>b>c a>b>c,防止出现重复的解
  • 为了简化求解,我们要先对数组进行排序
  • 因此我们得到
    n u m s [ a ] + n u m s [ b ] + n u m s [ c ] < = n u m s [ a ] + n u m s [ b ] + n u m s [ c + 1 ] nums[a]+nums[b]+nums[c]<=nums[a]+nums[b]+nums[c+1] nums[a]+nums[b]+nums[c]<=nums[a]+nums[b]+nums[c+1]
    n u m s [ a ] + n u m s [ b ] + n u m s [ c ] > t a r g e t nums[a]+nums[b]+nums[c]>target nums[a]+nums[b]+nums[c]>target的时候, n u m s [ c + 1 ] nums[c+1] nums[c+1]及更大的第三个元素就无需再考虑了
  • 此外我们也需要综合考虑三数之和比 t a r g e t target target小的情况

初版代码如下:

class Solution(object):
    def threeSumClosest(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: int
        """
        nums.sort()
        ans = nums[0]+nums[1]+nums[2]
        c = len(nums)-1
        for a in range(0,len(nums)-2):
            for b in range(a+1,len(nums)-1):
                while nums[a]+nums[b]+nums[c] > target and c > b:
                    c -= 1
                if c<len(nums)-1:
                    val = nums[a]+nums[b]+nums[c+1]
                    ans = val if abs(val-target)<abs(ans-target) else ans
                if c > b:
                    val = nums[a]+nums[b]+nums[c]
                    ans = val if abs(val-target)<abs(ans-target) else ans
        return ans



可以看出来结果不是很好
以上方法我理解本质为u单指针的方法,现在考虑用双指针的方法进行编程,从两个方向缩小搜索空间

class Solution(object):
    def threeSumClosest(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: int
        """
        nums.sort()
        ans = nums[0]+nums[1]+nums[2] 
        for a in range(0,len(nums)-2):
            b,c = a+1,len(nums)-1
            while(b < c):
                val = nums[a]+nums[b]+nums[c] 
                #if val == target:
                #    return val
                #else:
                ans = val if abs(val-target)<abs(ans-target) else ans
                if val < target:
                    b += 1
                else:
                    c -= 1
        return ans

在这里插入图片描述

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/3sum-closest

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/367168.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux服务器上Docker中安装jenkins

前言 Jenkins是开源CI&CD软件领导者&#xff0c; 提供超过1000个插件来支持构建、部署、自动化&#xff0c; 满足任何项目的需要。 本文主要提供通过docker安装jenkins镜像&#xff0c;并配置nginx反向代理页面配置和使用。通过jenkins完成项目的自动部署。 我在安装之前…

ThinkPHP ^6图片操作进阶

图片裁剪、缩略、水印不再是TP框架系统内置的功能&#xff0c;需要安装。 目录 安装 图片处理 1.创建图片对象 2.获取图片属性 3.裁剪图像 4.生成缩略图 6.保存图像 7.水印 安装 使用composer在项目根目录打开命令行执行&#xff1a; composer require topthink/think…

Simulink 电机控制:单电阻三相电流重构算法仿真总结

目录 理论基础 仿真实现 硬件实现 总结 理论基础 参考Microchip AN1299 《PMSM 无传感器 FOC的单分流三相电流重构算法》&#xff0c;详细的理论可以参考这个文档&#xff0c;这里只简单总结一下。单电阻采样的核心就是要在一个周期内实现两相电流的采样并通过基尔霍夫定…

【UE4 制作自己的载具】3-载具蓝图实现(基本)

效果步骤新建一个蓝图&#xff0c;继承“WheeledVehicle&#xff08;轮式载具&#xff09;”命名为“Vehicle_BP”&#xff0c;双击打开该蓝图选中“Mesh&#xff08;继承&#xff09;”&#xff0c;然后在细节中&#xff0c;骨架网格体选择“Vehicle”添加一个弹簧臂和摄像机组…

Windows下mysql8.0.32安装配置方法图文教程

Windows下mysql8.0.31安装配置方法图文教程 1、下载可以到官网的地址下载即可 https://dev.mysql.com/downloads/file/?id516465 2、解压缩并重命名mysql-8.0.32-winx64为mysql 3、创建my.ini配置文件&#xff0c;创建data文件夹。 4、打开记事本另存为my.ini并且使用ANSI编…

23年了,GOPATH和go.mod 还在冲突!

现在 新配了 go环境 设置了GOROOT&#xff0c;GOPATH &#xff0c;发现引用别的包会出问题。一直会报 package XX not in GOROOT &#xff08;xxxx&#xff09;我的目录&#xff1a;我的开发目录&#xff1a; /home/fate/go_projects/老样子&#xff0c;下面有 /home/fate/go_…

元宇宙与ChatGPT结合 一场颠覆式场景革命或将到来?

元宇宙和ChatGPT都是当前数字化领域中非常热门的技术和应用&#xff0c;两者之间也存在一定的关系&#xff0c;结合起来&#xff0c;可以为企业提供更加智能化、个性化的服务和支持&#xff0c;同时也可以拓展企业的市场和品牌影响力&#xff0c;提高企业的效率和创新能力。 元…

公司新来一00后说我不会自动化测试,3个问题直接给他问趴下...

今天我们公司刚入职一小伙&#xff0c;听说是00后&#xff0c;今天在办公室交流了一下&#xff0c;他问我会不会自动化测试&#xff0c;我直呼好家伙&#xff0c;直接问了他3个开展自动化测试问题....一问3不知.....还有待加强呀我们在制定自动化测试实施策略时&#xff0c;首先…

java servlet详解

一、Servlet实现方式 1、实现Servlet接口&#xff0c;接口中的方法必须全部实现。此种方式支持最大程度的自定义。 2、继承GenericServlet&#xff0c;service方法必须重写&#xff0c;其他方可根据需求&#xff0c;选择性重写。 使用此种方式&#xff0c;表示只在接收和响应…

作为通信人,你知道国内有哪些通信领域的博物馆吗?

众所周知&#xff0c;博物馆是收藏、展示和研究历史文物的地方。参观博物馆&#xff0c;既可以回顾历史往事&#xff0c;也可以学习知识。 那么&#xff0c;作为通信人&#xff0c;你知道国内有哪些通信领域的博物馆吗&#xff1f; 今天&#xff0c;就让小编给大家介绍介绍。█…

微鳄365,可私有化部署的企业管理软件,让数据更安全让管理更方便

编者按&#xff1a;本文分析了企业数字化转型中常遇到的一些困难&#xff0c;并进一步指出微鳄365一体化解决方案&#xff0c;可以帮助企业克服这些困难。关键词&#xff1a;免安装&#xff0c;免维护&#xff0c;成本低&#xff0c;数据安全&#xff0c;共享协作&#xff0c;个…

利用STM32的LR寄存器调试HardFault错误

R14 or LR(Link Register) HardFault调试的思路 先在出错误的地方打断点&#xff0c;让程序的状态固定下来&#xff1b;由于HardFault属于异常&#xff0c;所以出现HardFault后&#xff0c;LR的值一定是0xFFFFFFFx&#xff0c;这样就可以根据其值&#xff0c;判断程序进入这个…

C++学习记录——십일 string类模拟实现

这篇对于string类的实现会一步步来&#xff0c;从错误到正确&#xff0c;尽量展现可能会忽略掉的细节. 文章目录1、初始化列表2、拷贝构造函数和赋值函数3、循环输出&#xff0c;迭代器4、插入删除等5、流插入流提取6、其它接口1、初始化列表 先写下来这些代码 String.h #pra…

KDJB-802微机继电保护测试仪

一、产品概述 KDJB-802微机继电保护测试仪是在参照电力部颁发的《微机型继电保护试验装置技术条件(讨论稿)》的基础上&#xff0c;广泛听取用户意见&#xff0c;总结目前国内同类产品优缺点&#xff0c;充分使用现代新的的微电子技术和器件实现的一种新型小型化微机继电保护测…

Delphi RSA加解密

感谢、感谢、感谢大佬的分享&#xff0c;https://github.com/ZYHPRO/RSAEncryptAndDecode 目录 1. 前言 2. 准备工作 3. Demo注意事项说明 3.1 公钥、私钥文本格式 3.2 回车键的影响 3.3 中文加解密说明 4. 结语 1. 前言 最近工作上安排了一个项目&#xff0c;与工商银行之…

whistle+SwitchyOmega配置代理解决白名单跨越

文章目录whistleSwitchyOmega配置代理什么是whistle什么是SwitchyOmega示例&#xff1a;作用为什么不直接使用SwitchyOmega代理whistleSwitchyOmega配置代理 什么是whistle whistle主要用于查看、修改HTTP、HTTPS、Websocket的请求、响应&#xff0c;也可以作为HTTP代理服务器…

数据结构-考研难点代码突破(树型查找 - 红黑树(RBT)插入流程图,删除)

文章目录1. 红黑树的定义和性质红黑树的插入操作流程红黑树的删除&#xff08;了解&#xff09;1. 红黑树的定义和性质 红黑树查找与删除的效率和AVL树相同。 但是因为AVL树在插入或删除节点可能破坏AVL树结构&#xff0c;而重新调整树的开销大。所以引出了红黑树。 红黑树的…

内网渗透(五十二)之域控安全和跨域攻击-搭建和查看域信任关系

系列文章第一章节之基础知识篇 内网渗透(一)之基础知识-内网渗透介绍和概述 内网渗透(二)之基础知识-工作组介绍 内网渗透(三)之基础知识-域环境的介绍和优点 内网渗透(四)之基础知识-搭建域环境 内网渗透(五)之基础知识-Active Directory活动目录介绍和使用 内网渗透(六)之基…

为什么你的客户不喜欢用你的知识库呢?

现在很多企业的知识库处于一个完全荒废的状态&#xff0c;极少顾客愿意去查询使用&#xff0c;有的客户甚至完全停止使用企业知识库&#xff0c;这到底是为什么呢&#xff1f;看过许多公司的知识库后&#xff0c;总结了几个知识库失败的原因&#xff0c;并且提出了几个解决方法…