每日算法系列【LeetCode 16】最接近的三数之和
题目描述
给定一个包括 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】最接近的三数之和相关推荐
- Java实现 LeetCode 16 最接近的三数之和
16. 最接近的三数之和 给定一个包括 n 个整数的数组 nums 和 一个目标值 target.找出 nums 中的三个整数,使得它们的和与 target 最接近.返回这三个数的和.假定每组输入只存 ...
- leetcode —— 16. 最接近的三数之和
给定一个包括 n 个整数的数组 nums 和 一个目标值 target.找出 nums 中的三个整数,使得它们的和与 target 最接近.返回这三个数的和.假定每组输入只存在唯一答案. 例如,给定数 ...
- leetcode 16.最接近的三数之和
题目 给定一个包括 n 个整数的数组 nums 和 一个目标值 target.找出 nums 中的三个整数,使得它们的和与 target 最接近.返回这三个数的和.假定每组输入只存在唯一答案. 例如, ...
- LeetCode 16. 最接近的三数之和(固定左端+滑动窗口)
1. 题目 给定一个包括 n 个整数的数组 nums 和 一个目标值 target.找出 nums 中的三个整数,使得它们的和与 target 最接近.返回这三个数的和.假定每组输入只存在唯一答案. ...
- LeetCode 16. 最接近的三数之和 3Sum Closest
给定一个包括 n 个整数的数组 nums 和 一个目标值 target.找出 nums 中的三个整数,使得它们的和与 target 最接近.返回这三个数的和.假定每组输入只存在唯一答案. 例如,给定数 ...
- 3. Leetcode 16. 最接近的三数之和 (数组-双向双指针)
给你一个长度为 n 的整数数组 nums 和 一个目标值 target.请你从 nums 中选出三个整数,使它们的和与 target 最接近.返回这三个数的和.假定每组输入只存在恰好一个解.示例 1: ...
- LeetCode 16最接近的三数之和
力扣 思路 排序+双指针 枚举第一个数a,对剩下的两个元素b,c,希望它们的和最接近target-a 1.如果它们在原数组中枚举的范围没有任何规律可言,只能用两重循环来枚举所有情况 ->考虑对数 ...
- LeetCode 16 最接近的三数之和
https://leetcode-cn.com/problems/3sum-closest/ 解决方案 class Solution {public int threeSumClosest(int[] ...
- Leetcode 16. 最接近的三数之和(3Sum Closest)
解法一: class Solution { public:int threeSumClosest(vector<int>& nums, int target) {int close ...
- Leetcode算法Java全解答--16. 最接近的三数之和
Leetcode算法Java全解答–16. 最接近的三数之和 文章目录 Leetcode算法Java全解答--16. 最接近的三数之和 题目 想法 结果 总结 代码 我的答案 暴力破解 滑动列表 大佬 ...
最新文章
- MCSE2003学习之六
- android开发岗_android应用开发
- linux测试怎样看,linux入门篇:如何查看centos版本
- 关于pytorch中super的一点思考,结合代码
- 深度搜索问题c语言,C语言实现的图的深度搜索与广度搜索程序.doc
- mysql客户端版本太低_windows一机多装mysql,5.5低版本+5.8高版本
- Idea(二) 解决IDEA卡顿问题及相关基本配置
- uni-app 跳转支付宝小程序以及带参
- ROS学习记录:读入bag文件,用Rviz读入播放
- PASCAL VOC2012数据集的下载及简单讲解
- 网络API接口的使用
- Win11键盘无法输入任何东西怎么解决?
- win10更新后IE不见了
- 微信小程序 view的文本自动换行了的问题(scroll-view)/微信小程序 view换行跟不换行的解决方案
- 前端批量下载七牛云文件
- 函数模板和类模板详解
- 在谷歌浏览器下table的td border显示的问题
- 电脑重装系统后经常蓝屏怎么解决
- 《深入浅出WPF》笔记——模板篇
- 深度学习之数学基础(概率与统计)