给定一个包括 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;
}
};

最新文章

  1. 【转】浅谈JavaScript、ES5、ES6
  2. @ResponseBody
  3. android开发------编写用户界面之相对布局
  4. Rhel6-lanmp架构配置文档
  5. js showModalDialog打开新的页面给原页面传值问题
  6. CodeForces 698A - Vacations (Codeforces Round #363 (Div. 2))
  7. Hibernate之环境搭建
  8. js特效遮罩层(弹出层)
  9. 对于JDBC数据库的初始化操作
  10. CSS黄金三段--消除边框的影响
  11. android 获取wifi列表,如果你忽略了这个细节,可能你的软件会崩溃
  12. studio安装插件
  13. Appium+Python3+iOS真机环境搭建
  14. vuex store刷新存储状态
  15. 集训队日常训练20181201 E 1005 : 小蝌蚪
  16. 找不到 main 方法, 请将 main 方法定义为: public static void main(String[] args) 否则 JavaFX 应用程序类必须扩展javafx.应用程序类必 须扩展javafx.application.Application”
  17. Vue基础进阶 之 常用的实例属性
  18. J - Oil Skimming 二分图的最大匹配
  19. SpringMVC之使用 @RequestMapping 映射请求
  20. SSIS 剖析数据流之:连接和查找转换

热门文章

  1. janusgraph-控制台操作命令
  2. LeetCode 988. Smallest String Starting From Leaf
  3. pgloader 学习(三)快速使用
  4. mysql ERROR 1862 (HY000): 密码超时错误解决 Your password has expired.To log in you must change it using a client that supports expired password
  5. 【树形DP】骑士
  6. x64内核强删文件.
  7. (一)Cisco DHCP Snooping原理(转载)
  8. 下载根目录下的pdf文件, 浏览器下载
  9. python安装redis库
  10. JavaWeb项目启动过程与ServletContext