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

示例1:

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

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

先思考一下,后面我会给出一个解题思路~?

图来自网络

这道题目,用到了一种算法——双指针算法。如果先前没有见过,你可以简单理解,双指针算法就是利用两个指针,一个在数组开头,一个在结尾,前者从前往后移动,后者从后往前移动,直到找到符合我们要求的位置。

对于我们这道题,可以按照下面的思路去解答:

数组排序。使用双指针算法前都是需要有序数组的,所以先排序;

如,对于示例 nums = [-1,2,1,-4] ,排序后就是[-4, -1, 1, 2]

)对数组nums进行遍历,在当前位置后的空间,再对其进行双指针遍历;

如:对于示例 nums = [-4, -1, 1, 2],

当i=1时候,就在nums[2:] 后的空间,即在 [1,2] 中进行双指针遍历:

左指针从最左端开始,即 left = i+1

右指针从最右端开始,即 right = len(nums)-1 

)如果三数之和( nums[i]+nums[left]+nums[right] )就是target,马上返回结果;

  • 如果三数之和 小于target,因为数组是排好序的,所以左指针向右移动1个位置,增大三数之和;

  • 如果三数之和 大于target,右指针向左移动1个位置,减小三数之和;

  • 一直迭代,直到left>right

)不断迭代2-3步,不断缩小三数之和与目标target的差值。

Python实现:

def threeSumClosest(nums, target):# 先对数组进行排序nums.sort()print(nums)# 获取数组长度length=len(nums)# 如果数组长度小于3,返回Noneif length<3:return None# res记录当前求和结果res=nums[0]+nums[1]+nums[2]# 迭代数组for i in range(length):left,right=i+1,length-1while left<right:tmpsum=nums[i]+nums[left]+nums[right]if tmpsum>target:right-=1elif tmpsum<target:left+=1else:return tmpsumif abs(tmpsum-target)<abs(res-target):res=tmpsumreturn res

? 配图角色背景介绍:

钢铁侠、绿巨人、雷神联合打造出来的人造人,可随机改变外貌,额头镶着心灵宝石,是他的生命之源。复联中幻视的登场戏份不多,使得大家并不是很留意过他,但是他的身上拥有者无限宝石的其中一颗心灵宝石。无限宝石有多强大这个就不细说了,奇异博士仅用了时间宝石的一部分能力就能逼迫多玛姆停止入侵地球的脚步。幻视的能力还未展现出来,但是即将上映的《复仇者联盟3》灭霸的到来就是冲着幻视身上这颗心灵宝石而来。幻视(Vision)是美国漫威漫画旗下超级英雄,初次登场于《Avengers》第57期 (1968年10月),是奥创为了对付复仇者联盟,将二战英雄初代霹雳火的身体改造,并用神力人的脑波将之激活而成的生化人,之后在与复仇者的多次战斗中、幻视被复仇者成员之间的人性所感动、从而背叛奥创加入复仇者联盟,并且遇到了同为复仇者成员的绯红女巫、于是两人坠入爱河结为夫妻。在电影《复仇者联盟2:奥创纪元》中改编为是钢铁侠设计的人工智能管家“贾维斯”的升级版本(注:成为幻视后意识已经不是贾维斯,而自我产生了一个新的思维和意识),身体是奥创用“再生摇篮”制造,并使用振金为材料,生命来源源自于洛基权杖上的心灵宝石,在布鲁斯·班纳(绿巨人)和托尼·史塔克(钢铁侠)上传贾维斯的意识后、由雷神托尔的雷神之锤放电激活完成。因为心灵宝石的原因,所以能够举起雷神之锤,后加入复仇者联盟。

【LeetCode04】最接近的三数之和相关推荐

  1. python【力扣LeetCode算法题库】16- 最接近的三数之和

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

  2. 算法:最接近的三数之和

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

  3. LeetCode 15三数之和16最接近的三数之和

    三数之和(双指针) 题意: 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组. 注意 ...

  4. leetcode 16. 3Sum Closest | 16. 最接近的三数之和(双指针)

    题目 https://leetcode.com/problems/3sum-closest/ 题解 方法1:固定 L,双指针找 M.R 时间复杂度 O(n^2),推荐此方法. 证明不会有元素遗漏,详见 ...

  5. 【算法系列之十二】最接近的三数之和

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

  6. [Leetcode16]最接近的三数之和

    [Leetcode16]最接近的三数之和 转载自leetcode https://leetcode-cn.com/problems/3sum-closest/ 1.题目 给定一个包括 n 个整数的数组 ...

  7. 20200126:(leetcode)三数之和 最接近的三数之和(含图解)

    三数之和 && 最接近的三数之和 题目 基本思路 代码实现 题目 三数之和 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b ...

  8. python计算列表中最接近的三数之和

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

  9. LeetCode15. 三数之和 16. 最接近的三数之和

    LeetCode15. 三数之和 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组 ...

  10. 思维私塾——LeetCode16.最接近的三数之和

    目录 LeetCode16.最接近的三数之和 题目: 分析 只找一个数 找两个数的和 找三个数的和 代码实现 最后 LeetCode16.最接近的三数之和 ​ 各位朋友们大家好呀,我是你的老朋友冢狐, ...

最新文章

  1. 线性回归算法原理简介
  2. visual studio code(vs code)如何更换颜色背景
  3. QT-Qt获取当前时间并格式化输出及将积秒转换成时间
  4. 10-20-010-简介-目录-Kylin目录详解
  5. Java进阶之网络编程
  6. 关于“单元组”数量的计算
  7. day11函数的进阶动态参数,命名空间,作用域,第一类对象
  8. 为什么做网站一般不用服务端控件?
  9. RHCE033内容摘要
  10. pch中常用的宏定义
  11. 科技爱好者周刊(第 181 期):移动支付应该怎么设计?
  12. [论文]基于强化学习的控制输入非线性水下机器人自适应神经网络控制
  13. java ftps 证书_java – 连接到FTPS服务器
  14. Stata数据处理: 面板数据填充和补漏
  15. 一元多项式的除法C++实现
  16. SAP access 破解
  17. getline()的用法详解
  18. scipy.sparse.vstack
  19. 300+零售CIO大咖齐聚杭州 他们聊了什么?
  20. 微软预告:下一代 Windows 将很快宣布

热门文章

  1. 卡迈克尔(Carmichael)函数
  2. 中国科学院朱清时:量子意识(人人能懂版)
  3. matlab中的a‘与a.‘的不同之处
  4. 不凡的夫夫 斯特林公式的应用
  5. 分页器Pagerhelper
  6. Flutter 相关知识点
  7. C++ 类Pimpl手法
  8. Python绘制世界疫情地图
  9. 公钥密码体系基于的数学难题
  10. Linux命令——ln命令