LeectCode 16. 3Sum Closest *** 对撞指针
来源:互联网 发布:数学建模的算法 编辑:程序博客网 时间:2024/06/05 15:04
- 题目
- 题意
- 注意
- 思路
- 代码
- 结果
- 题目
题目
Given an array S of n integers, find three integers in S such that the sum is closest to a given number, target. Return the sum of the three integers. You may assume that each input would have exactly one solution.
For example, given array S = {-1 2 1 -4}, and target = 1.
The sum that is closest to the target is 2. (-1 + 2 + 1 = 2).
题意
给定一个含有n个元素的整型数组S,从S中找出3个元素使得其和与target最接近,返回这三个元素的和
注意
会有无解的情况吗?
有多解,就是其和与target值得接近程度一样,怎么办?这些都应该和面试管沟通清楚。该题已经说明有唯一解。
思路
类似15.3sum。
a+b+c = sum,遍历c,对撞a,b每次计算sum和target的接近程度。
重点是:如何判断两个数的接近程度,在数轴上表示就是两点之间的距离
x1和x2之间的距离 distance = abs(x1-x2),当前的距离比历史的距离更小则更新并记录
代码
class Solution {public: int threeSumClosest(vector<int>& nums, int target) { int min=9999; int minsum = 0; sort(nums.begin(),nums.end()); //排序,对撞的必要条件 for(int i=0;i<nums.size();i++) { int l=i+1; int r=nums.size()-1; while(l<r) { int tempmin = 0; //动态调整不断逼近target if(target>(nums[l]+nums[r]+nums[i])) { tempmin = nums[i]+nums[l]+nums[r]; l++; } else { tempmin = nums[i]+nums[l]+nums[r]; r--; } //定义三个元素的和与目标的接近程度 if(abs(target-tempmin)<min) { min = abs(target - tempmin); minsum = tempmin; } } } return minsum; }};
结果
阅读全文
0 0
- LeectCode 16. 3Sum Closest *** 对撞指针
- 3Sum Closest-双指针
- 16. 3Sum Closest
- 16. 3Sum Closest
- 16. 3Sum Closest
- 16. 3Sum Closest
- 16. 3Sum Closest
- 16. 3Sum Closest
- 16. 3Sum Closest
- 16. 3Sum Closest
- 16. 3Sum Closest
- 16. 3Sum Closest
- 16. 3Sum Closest
- 16. 3Sum Closest
- 16. 3Sum Closest
- 16. 3Sum Closest
- 16. 3Sum Closest
- 16. 3Sum Closest
- Oracle查询时间戳,建表时间,新建序列,误删数据
- Spring全家桶(五)Bean的多种配置方法
- ThreadPoolExector(线程池)
- 深度 | ICCV研讨会:实时SLAM的未来以及深度学习与SLAM的比较(附论文和PPT)
- MySQL高级 之 索引面试题分析
- LeectCode 16. 3Sum Closest *** 对撞指针
- Android ButterKnife Zelezny插件的安装与使用
- Solr针对空间搜索的支持
- 5.15 ruby爬虫事件 (解决代理,重定向)
- Android内存分配回收机制
- linux下sqlite用c语言回调函数操作数据库
- Android手机自动化测试工具有哪些?
- python使用pandas抽样训练数据中某个类别
- 这里是标题