【LeetCode】最接近的三数之和【排序,固定k1,二分寻找k2和k3】
2024-10-20 11:55:17
给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。
例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.
与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/3sum-closest
分析:
先给数组排序,O(N*log N)
假定满足要求的三个数:k1<=k2<=k3
先固定k1,然后通过二分寻找k2和k3
循环固定k1,O(N)
二分寻找k2和k3,O(N*log N)
时间主要花费在排序上,总的时间复杂度为O(N*log N)
class Solution {
public:
int threeSumClosest(vector<int>& a, int t)
{
int n=a.size();
int ans;
int minx=INT_MAX;
sort(a.begin(),a.end());
for(int k=0;k<n-2;k++)
{
int l=k+1;
int h=n-1;
while(l<h)
{
int sum=a[k]+a[l]+a[h];
//cout<<"k="<<k<<" l="<<l<<" h="<<h<<" sum="<<sum<<endl;
if(abs(sum-t)<minx)
{
minx=abs(sum-t);
ans=sum;
}
if(sum>t)
{
h--;
}else if(sum<t)
{
l++;
}else if(sum==t)
{
return sum;
}
}
}
return ans;
}
};
最新文章
- 【转】浅谈JavaScript、ES5、ES6
- @ResponseBody
- android开发------编写用户界面之相对布局
- Rhel6-lanmp架构配置文档
- js showModalDialog打开新的页面给原页面传值问题
- CodeForces 698A - Vacations (Codeforces Round #363 (Div. 2))
- Hibernate之环境搭建
- js特效遮罩层(弹出层)
- 对于JDBC数据库的初始化操作
- CSS黄金三段--消除边框的影响
- android 获取wifi列表,如果你忽略了这个细节,可能你的软件会崩溃
- studio安装插件
- Appium+Python3+iOS真机环境搭建
- vuex store刷新存储状态
- 集训队日常训练20181201 E 1005 : 小蝌蚪
- 找不到 main 方法, 请将 main 方法定义为: public static void main(String[] args) 否则 JavaFX 应用程序类必须扩展javafx.应用程序类必 须扩展javafx.application.Application”
- Vue基础进阶 之 常用的实例属性
- J - Oil Skimming 二分图的最大匹配
- SpringMVC之使用 @RequestMapping 映射请求
- SSIS 剖析数据流之:连接和查找转换
热门文章
- janusgraph-控制台操作命令
- LeetCode 988. Smallest String Starting From Leaf
- pgloader 学习(三)快速使用
- mysql ERROR 1862 (HY000): 密码超时错误解决 Your password has expired.To log in you must change it using a client that supports expired password
- 【树形DP】骑士
- x64内核强删文件.
- (一)Cisco DHCP Snooping原理(转载)
- 下载根目录下的pdf文件, 浏览器下载
- python安装redis库
- JavaWeb项目启动过程与ServletContext