乘风破浪:LeetCode真题_016_3Sum Closest

一、前言

     这一次,问题又升级了,寻找的是三个数之和最靠近的某个数,这是非常让人难以思考的,需要把三个数相加之后和最后给的目标进行比较,看看接近的程度,选择最接近的。不一定是等于目标。那么我们又该怎么做呢??

二、3Sum Closest

2.1 问题

2.2 分析与解决

由上面的题意我们可以知道上一次的3sum所用的算法这边可能用不上了,需要进行改进。比如我们可以设想一个变量使得a+b+c≠target,但是a+b+c+temp=target,这样我们就能将这个问题化归到之前的3sum问题上,通过尽量缩小temp的大小来找到最佳的组合。但是问题是如何知道temp的范围呢[-oo,+oo],但是绝对值越接近0越好。这样我们就陷入了一种死胡同而不能解决问题。我们可不可以想一下还是按照3sum的想法和方式来解答问题,首先从小到大排序,其次每次先选择一个元素,再选这个元素的下一个元素和最有一个元素对应的两个指针,来不断的遍历集合[start,end],当我们求得的sum比target大了,我们就end--,反之则start++,每一次都计算此时的sum与target之差的绝对值和已经求得的差的绝对值的大小,如果更小则修改,直到所有的元素都遍历完毕,从而得到结果。

public class Solution {
public int threeSumClosest(int[] num, int target) {
int result = num[0] + num[1] + num[num.length - 1];
Arrays.sort(num);
for (int i = 0; i < num.length - 2; i++) {
int start = i + 1, end = num.length - 1;
while (start < end) {
int sum = num[i] + num[start] + num[end];
if (sum > target) {
end--;
} else {
start++;
}
if (Math.abs(sum - target) < Math.abs(result - target)) {
result = sum;
}
}
}
return result;
}
}

三、总结

遇到问题我们要学会转变思维,不能在一棵树上吊死,一定要仔细的推敲一下,学会用收尾指针处理排序之后的数组的思维和能力,从而更快的完成问题。

最新文章

  1. 【30集iCore3_ADP出厂源代码(ARM部分)讲解视频】30-2 工程及程序构架介绍
  2. 真机测试及布署Code Sign error问题总结
  3. 建站集成软件包 XAMPP搭建后台系统与微信小程序开发
  4. 【Android】不使用WebView来执行Javascript脚本(Rhino)
  5. WIFI WPA1/2 Crack for Windows
  6. C++文件读写详解(ofstream,ifstream,fstream)
  7. 消格子时一个很深的bug的修复纪录
  8. Access to the path &#39;&#39; is denied.解决方案
  9. hdu 1024(最大和连续子序列增强版)
  10. 转载c#泛型 类型参数的约束(c#编程指南)
  11. Embedded software develop step
  12. 转 C语言面试题大汇总
  13. 通过配置Windows 防火墙允许使用TCP/IP协议远程访问数据库
  14. 转载--MYSQL5.7:Access denied for user &#39;root&#39;@&#39;localhost&#39; (using password:YES)解决方法
  15. jupyter notebook + frp 实现内容穿透
  16. java日志系统中的 NDC
  17. 《转》Web Service实践之——开始XFire
  18. leveldb源码分析--SSTable之TableBuilder
  19. ActiveMQ 集群配置 高可用
  20. Integer.parseInt() 和 valueOf()

热门文章

  1. SpringCloud - RestTemplate 的三种使用方式
  2. mysql导入外部.sql文件时错误
  3. MyEclipse部署web项目的关键
  4. JavaScript三大对象详细解说
  5. js 数组常用的一些方法
  6. 前端(十二):react-redux实现逻辑
  7. HTTP2 概述
  8. MySQL Metadata
  9. 01.css选择器--&gt;类选择器
  10. div实现水平和垂直都居中的三个超实用的方法