题目描述

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

示例1

        输入:
nums = [-1,2,1,-4], target = 1.
输出:
2
解释:
与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).

题解

最暴力的方法就是直接枚举三个不同的数,然后求出差值最小的和,但是这样时间复杂度是 ,太高了。

那么我们先枚举一个数试试,并且假设它是最小的数,然后寻找比它大的两个数就行了,这就需要我们先对数组进行排序(假设排序后数组是 )。

如果枚举的数是 ,那么我们只需要寻找和 差值最小的两个数之和就行了。

如果用双指针的方法,初始时令 ,同时 。那么如果 ,就说明 太大了,需要左移。否则的话如果 ,就说明 太小了,需要右移。在不断移动的过程中更新最小差值就行了,因为 最终一共只移动了 步,所以总的时间复杂度只有 ,忽略低阶项之后只有 ,还是可以接受的。

代码

c++

        class Solution {public:int threeSumClosest(vector<int>& nums, int target) {int n = nums.size(), res = 10000000;sort(nums.begin(), nums.end());for (int i = 0; i < n - 2; ++i) {int l = i + 1, r = n - 1;while (l < r) {int sum = nums[i] + nums[l] + nums[r];if (sum == target) return sum;if (abs(sum-target) < abs(res-target)) res = sum;if (sum > target) r--;else l++;}}return res;}
};

python

        class Solution:def threeSumClosest(self, nums: List[int], target: int) -> int:n, res = len(nums), 10000000nums.sort()for i in range(n-2):l, r = i+1, n-1while l < r:s = nums[i] + nums[l] + nums[r]if s == target:return sif abs(s-target) < abs(res-target):res = sif s > target:r -= 1else:l += 1return res

每日算法系列【LeetCode 16】最接近的三数之和相关推荐

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

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

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

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

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

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

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

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

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

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

  6. 3. Leetcode 16. 最接近的三数之和 (数组-双向双指针)

    给你一个长度为 n 的整数数组 nums 和 一个目标值 target.请你从 nums 中选出三个整数,使它们的和与 target 最接近.返回这三个数的和.假定每组输入只存在恰好一个解.示例 1: ...

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

    力扣 思路 排序+双指针 枚举第一个数a,对剩下的两个元素b,c,希望它们的和最接近target-a 1.如果它们在原数组中枚举的范围没有任何规律可言,只能用两重循环来枚举所有情况 ->考虑对数 ...

  8. LeetCode 16 最接近的三数之和

    https://leetcode-cn.com/problems/3sum-closest/ 解决方案 class Solution {public int threeSumClosest(int[] ...

  9. Leetcode 16. 最接近的三数之和(3Sum Closest)

    解法一: class Solution { public:int threeSumClosest(vector<int>& nums, int target) {int close ...

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

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

最新文章

  1. MCSE2003学习之六
  2. android开发岗_android应用开发
  3. linux测试怎样看,linux入门篇:如何查看centos版本
  4. 关于pytorch中super的一点思考,结合代码
  5. 深度搜索问题c语言,C语言实现的图的深度搜索与广度搜索程序.doc
  6. mysql客户端版本太低_windows一机多装mysql,5.5低版本+5.8高版本
  7. Idea(二) 解决IDEA卡顿问题及相关基本配置
  8. uni-app 跳转支付宝小程序以及带参
  9. ROS学习记录:读入bag文件,用Rviz读入播放
  10. PASCAL VOC2012数据集的下载及简单讲解
  11. 网络API接口的使用
  12. Win11键盘无法输入任何东西怎么解决?
  13. win10更新后IE不见了
  14. 微信小程序 view的文本自动换行了的问题(scroll-view)/微信小程序 view换行跟不换行的解决方案
  15. 前端批量下载七牛云文件
  16. 函数模板和类模板详解
  17. 在谷歌浏览器下table的td border显示的问题
  18. 电脑重装系统后经常蓝屏怎么解决
  19. 《深入浅出WPF》笔记——模板篇
  20. 深度学习之数学基础(概率与统计)

热门文章

  1. SQL SERVER 2005 数据挖掘与商业智能完全解决方案---学习笔记(一)
  2. ROS通过串口,读写STM32和HC-SR04超声波测距信息
  3. Java之导入Excel 后端篇
  4. python开发之路---第二模块--OS模块
  5. QString字符串中双引号的梗
  6. 在ubuntu下使用搜狗的教育网代理
  7. 0311 Restoring the Factory Image
  8. ASP.NET AJAX中防止用户多次提交页面
  9. (宏)Word修改段落行距为固定值24磅
  10. (Hide my Windows)隐藏指定的应用窗口及托盘图标