3Sum Closest

题目:
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).


题意:
给定一个数组和一个目标值,返回其中3个数字的和且和值最接近目标值。


思路:
先把数组排序,把3个数字的问题转换为找2个数字问题,每次固定一个数值,那么target就变为了(target-固定的数字),找两个数字近似新target就简单多了,定义两个指针,指向首和尾,定义一个Min,表示与新target的差值,差值越小越接近,不断的向后移动首指针或者向前移动尾指针来调整近似度Min,直到轮寻完毕为止,也就是每个值都被固定过。


代码:

class Solution {
public:int threeSumClosest(vector<int>& nums, int target) {if(nums.size() == 0){return 0;}//排序sort(nums.begin(), nums.end());auto End = nums.end()-1;//初始化Min,为了第一次可以更新int Min = 2147483647;int ret = 0;//每次固定一个值,轮寻完毕为止,注意最小的为nums.end()-2,因为每次是3个值来判断。for(auto iter = nums.begin(); iter != nums.end()-1; ++iter){//第一个迭代器为首,第二个为尾auto iter1 = iter + 1;auto iter2 = nums.end()-1;//减去固定值产生新的targetint my_target = target-*iter;int tmp;//首尾迭代器不重合while(iter1 != iter2){tmp = *iter1 + *iter2;if(tmp < my_target){//判断是否有更小的近似度Minif(abs(my_target-tmp) < Min){Min = abs(my_target-tmp);ret = *iter1 + *iter2 + *iter;}//移动迭代器++iter1;}else if(tmp > my_target){if(abs(my_target-tmp) < Min){Min = abs(my_target-tmp);ret = *iter1 + *iter2 + *iter;}--iter2;}else{//如果相等说明找到了等于target的三个值return target;}}}return ret;}
};

leetcode 16 -- 3Sum Closest相关推荐

  1. LeetCode - 16. 3Sum Closest

    16. 3Sum Closest Problem's Link -------------------------------------------------------------------- ...

  2. LeetCode 16 3Sum Closest(最接近的3个数的和)

    翻译 给定一个有n个整数的数组S,找出S中3个数,使其和等于一个给定的数,target.返回这3个数的和,你可以假定每个输入都有且只有一个结果.例如,给定S = {-1 2 1 -4},和target ...

  3. LeetCode 16 3Sum Closest

    问题:给出一个数组nums,及目标数target,要求找出数组中三个数之和与target最接近的数 思路:第一种方法是使用三种循环,依次遍历,看三个数之和与目标数最拉近,同时更新.该算法时间复杂度为O ...

  4. LeetCode——16. 3Sum Closest

    一.题目链接:https://leetcode.com/problems/3sum-closest/ 二.题目大意: 给定一个数组A和一个目标值target,要求从数组A中找出3个数来,使得这三个数的 ...

  5. leetcode 16. 3Sum Closest | 16. 最接近的三数之和(双指针)

    题目 https://leetcode.com/problems/3sum-closest/ 题解 方法1:固定 L,双指针找 M.R 时间复杂度 O(n^2),推荐此方法. 证明不会有元素遗漏,详见 ...

  6. 【leetcode】16 3Sum Closest

    描述 给定一个数字集合 S 以及一个数字 target,需要从集合中找出3个数字的和与这个 target的值最接近(绝对值最小) 样例 Input: S = [-1, 2, 1, -4], targe ...

  7. 【LeetCode】3Sum Closest 解题报告

    [题目] Given an array S of n integers, find three integers in S such that the sum is closest to a give ...

  8. 16. 3Sum Closest

    2019独角兽企业重金招聘Python工程师标准>>> 和 3Sum 很像,与之不同的是,不再是求三个数的和是不是为0, 而是看三个数的和与target的差是否为最小,只需记录当前最 ...

  9. [LeetCode][Java] 3Sum Closest

    题目: Given an array S of n integers, find three integers in S such that the sum is closest to a given ...

最新文章

  1. 【Windows】清除win10开始菜单中失效打程序标签
  2. 在FCKeditor 2.6中添加插入视频和音频功能
  3. 认识Web前端、Web后端、桌面app和移动app新开发模式 - 基于Node.js环境和VS Code工具...
  4. 英特尔90亿美元卖掉「起家业务」,SK海力士接盘
  5. OpenGL textures combined组合纹理的实例
  6. 英语阅读推荐:主题切换控件 ExpressionBuilder
  7. uibot在子程序执行js失败_使用 Node.js 将珍藏的 bash 脚本封装成命令行工具
  8. 普通计算机怎么算根号_大学专业介绍 | 计算机专业的真实就业情况
  9. 程序猿 - 超实用的工具、素材、学习网站分享
  10. php yaf 教程,干货:PHP YAF框架实践教程——配置与多模块
  11. 华为交换机命令 端口速率_华为交换机限速配置命令2016
  12. OpenCV-绘制多边形(fillConvexPoly和fillPoly的区别)
  13. Windows环境下Android NDK环境搭建
  14. effective C++ 条款 44:将与参数无关的代码抽离templates
  15. Oracle数据库安装及配置
  16. spss统计分析基础教程(上)--自学
  17. 用Python做入门OJ题
  18. VB SendMessage 函数
  19. bat批处理文件夹内文件名的提取
  20. JS面试中常见的算法题

热门文章

  1. 无线地磁传感器更适合路边停车系统
  2. 【绝对管用】彻底的卸载干净oracle 11g
  3. git新branch创建
  4. 5.MCScanX 与circos下载、安装、运用
  5. Citrix 服务器虚拟化之十四 介绍桌面虚拟化之XenDesktop 7.0
  6. 无刷电机FOC控制------转速计算、载波频率相关
  7. android 8 奕骆,【innos奕骆D6000评测】又一待机神器诞生 innos 奕骆D6000评测(全文)_innos 奕骆D6000_手机评测-中关村在线...
  8. Http的各种请求方法(详解)
  9. python主函数调用格式_python函数介绍
  10. 个人网站实现收款的几种方式