算法Day3-3个数之和最接近
来源:互联网 发布:拉姆赞卡德罗夫 知乎 编辑:程序博客网 时间:2024/06/05 12:13
题目
给定n个整数的一个数组S,在S中找出3个数,其加和最接近一个给定的数target,返回这3个数的和。可以假设每一次输入都只有一个解决方案。例如,给定数组 S = {-1 2 1 -4},并且target = 1。最接近target的和是 2 。(-1+2+1=2)。
解析
本题又是第二天题“3个数之和”问题的拓展,解法和第二题类似,唯一的区别是在遍历的过程中,需要增加一个变量来记录遍历过程中的最小值。
代码
#include<iostream>#include<vector>#include<algorithm>using namespace std;int threeSumClosest( vector< int > &num, int target){ sort(num.begin(), num.end()); int len = num.size(); int minV = INT_MAX, record; //存储minV最接近值,record记录加和 for(int i=0; i<len; i++) { int start = i + 1, end = len - 1; while(start < end) { int sum = num[i] + num[start] + num[end]; if(sum == target) //加和等于target,minV为0 { minV = 0; record = sum; break; } if(sum < target) //加和小于target,首指针++; { if(target-sum < minV) { minV = target - sum; record = sum; } start++; } else //加和大于target,尾指针--; { if(sum-target < minV) { minV = sum - target; record = sum; } end--; } } if(record == target) break; //去重 de-duplicate while(i<len-1 && num[i] == num[i+1]) i++; } cout<<record<<endl; return record;}//例如,给定数组 S = {-1 2 1 -4},并且target = 1。最接近target的和是 2 。(-1+2+1=2)。void main(){ int nums[] = {-1,2,1,-4}; vector<int> v; for(int i=0; i < sizeof(nums)/4; i++) v.push_back(nums[i]); threeSumClosest(v,1);}
0 0
- 算法Day3-3个数之和最接近
- 最接近3数之和
- N个正数选取若干个数之和最接近M
- [算法浅析] 划分数组,使得两个集合之和最接近
- 算法Day4-4个数之和
- 搜狗面试题:从N个正实数中选若干个数之和最接近M的递归实现
- 从给定的N个正数中选取若干个数之和最接近M
- 给定的N个正数中选取若干个数之和最接近M
- 面试题:从给定的N个正数中选取若干个数之和最接近M
- 从给定的N个正数中选取若干个数之和最接近M
- 面试题:从给定的N个正数中选取若干个数之和最接近M
- 子向量之和最接近0?
- 最接近的三数之和
- 最接近的三数之和
- 算法爱好者——最接近的三数之和 ? 待解决
- 最接近中位数的k个数
- 最接近中位数的k个数
- 算法导论 9.3-7 O(n)时间求最接近中位数的k个数
- uboot启动流程
- hihocoder,1400 : Composition
- 安卓笔记1之数据存储的方式
- AOP的理解
- 创建第一个hibernate
- 算法Day3-3个数之和最接近
- 有向图单源最短路径Dijkstra算法(高配版)
- Linux常用命令-压缩解压命令
- 常用的iOS第三方库以及实用的Xcode插件
- retrofit2 Content-Length and stream length disagree
- 从0到TrustZone(第二篇): QSEE提权漏洞及利用(CVE-2015-6639)
- HDP学习--HDFS Quotas
- 到底什么是数据库?
- PHP----对比session和cookie