1 题目描述

2 解题思路:排序+双指针

大体上思路和文巾解题 15. 三数之和_刘文巾的博客-CSDN博客是一样的

我们对整个数组进行升序排序。然后:

1)假设数组的长度为 n,我们先枚举 a,它在数组中的位置为 i;

2)为了防止重复枚举,我们在位置 [i+1, n) 的范围内枚举 b 和 c。

借助双指针,我们就可以对b和c的枚举的过程进行优化。初始时,bp指向位置 i+1,即左边界;c指向位置 n-1,即右边界。在每一步枚举的过程中,我们用 a+b+c来更新答案,并且:

1--如果a+b+c≥target,那么就将c 向左移动一个位置;(减小a+b+c的值)

2--如果a+b+c<target,那么就将 b向右移动一个位置。(增大a+b+c的值)

和15一样,枚举a,b,c 中任意元素并移动指针时,可以直接将其移动到下一个与这次枚举到的不相同的元素,减少枚举的次数。

class Solution:def threeSumClosest(self, nums: List[int], target: int) -> int:nums.sort()
#对数组进行排序ret=10**7
#我们需要的和结果最接近的值l=len(nums)for a in range(l):
#如果当前a的值和前一个值是一样的,那么可以直接跳过。因为这一个a对应的值之前已经考虑过了if(a!=0 and nums[a-1]==nums[a]):continueb=a+1c=l-1while(b<c):
#结束条件不能是b≤c,因为要三个不一样的数if(b!=a+1 and nums[b-1]==nums[b]):b+=1continue
#相同的b不用考虑if(c!=l-1 and nums[c+1]==nums[c]):c-=1continue
#相同的c不用考虑tmp=nums[a]+nums[b]+nums[c]if(abs(ret-target)>abs(tmp-target)):ret=tmp
#看当前的值是不是比目前最接近的值更接近,如果是的话更新最接近的值if(tmp>target):c-=1
#减少下一个tmp的值elif(tmp==target):return tmp
#相等,差距为0,直接返回else:b+=1
#增大下一个tmp的值return(ret)

文巾解题 16. 最接近的三数之和相关推荐

  1. Java实现 LeetCode 16 最接近的三数之和

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

  2. Leetcode算法Java全解答--16. 最接近的三数之和

    Leetcode算法Java全解答–16. 最接近的三数之和 文章目录 Leetcode算法Java全解答--16. 最接近的三数之和 题目 想法 结果 总结 代码 我的答案 暴力破解 滑动列表 大佬 ...

  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. LeetCode15. 三数之和 16. 最接近的三数之和

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

  6. leetcode —— 16. 最接近的三数之和

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

  7. leetcode 16.最接近的三数之和

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

  8. LeetCode 16. 最接近的三数之和(固定左端+滑动窗口)

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

  9. LeetCode 16. 最接近的三数之和 3Sum Closest

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

最新文章

  1. 关于学习Python的一点学习总结(27->关键字参数和默认值)
  2. ubuntu 16.04 python3 使用ryu
  3. spark学习(二)
  4. 希尔伯特曲线的绘制c语言,用四叉树和希尔伯特曲线做空间索引
  5. 使用 IAsyncResult 进行 .NET 异步编程
  6. cisco路由器 三层交换机简单环境配置实例(图)
  7. android studio moudel,Android Studio将module变为library
  8. 在Session中放HashMap在Jsp中用JSTL遍历方法
  9. Android SDK下载安装及配置教程
  10. php开源bi,Poli 简单易用的开源 BI 软件使用教程
  11. 华为服务器通过ilo虚拟光驱,如何通过ilo开启服务器远程桌面
  12. iOS 清理缓存方法
  13. 2021年湖北省区块链技术应用创新创业大赛已正式启动,欢迎报名参赛
  14. BERT简介及中文分类
  15. 重庆华侨城跨界联合潮牌T.M.D PCP发财潮流文化艺术聚会国庆开档
  16. UML与Java-- UML类图于Java的基本实现
  17. 2012网易校园招聘笔试试题
  18. 脑波设备mindwave二次开发框架
  19. mobl中的下载的wineclipse版本缺少googlemap.mobl文件库
  20. 使用最大后验概率学习正态分布的参数

热门文章

  1. 路由器交换机命令总结
  2. flash 遮罩层全解
  3. java多线程中的异常处理
  4. java Map 怎么遍历
  5. 自动化WiFI钓鱼工具——WiFiPhisher源码解读
  6. PAT甲级1055 The World‘s Richest:[C++题解]k路归并
  7. IDEA中cannot resolve method getBean in applicationContext的解决方法
  8. 柱状图设置坐标轴名称_职场老鸟珍藏的柱状图技巧
  9. android分享到新浪微博客户端吗,Android调用手机新浪微博客户端分享
  10. 抽象方法可以有方法体_抽象类和模板方法设计模式