和大神们学习每天一题(leetcode)-3Sum Closest
来源:互联网 发布:新闻数据分析 编辑:程序博客网 时间:2024/05/23 21:32
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).
本题和3Sum那道题类似,不同点在于需要计算与目标值的差距。
功能测试用例:{ -1, 2, 1, -4 },4特殊测试用例:{},0;{0},0;{0,0},0
class Solution{public:void FastSort(vector<int> &vsNumber, int nBegin, int nEnd)//快速排序{if (nBegin >= nEnd)return;int nPos1 = nBegin;int sNMiddle = vsNumber[nEnd], sNChange;for (int nPos2 = nBegin; nPos2 < nEnd; nPos2++){if (vsNumber[nPos2] < sNMiddle){sNChange = vsNumber[nPos1];vsNumber[nPos1] = vsNumber[nPos2];vsNumber[nPos2] = sNChange;nPos1++;}}vsNumber[nEnd] = vsNumber[nPos1];vsNumber[nPos1] = sNMiddle;FastSort(vsNumber, nBegin, nPos1 - 1);FastSort(vsNumber, nPos1 + 1, nEnd);}int threeSumClosest(vector<int> &num, int target){if (num.size() < 3)return NULL;int nResult = NULL,nRemain,nBegin,nEnd,nClosest = INT32_MAX,nAbs;FastSort(num,0,num.size()-1);//对输入的向量中元素进行排序for (int nTemp = 0; nTemp < num.size() - 2; nTemp++)//遍历向量中的元素{nRemain = target - num[nTemp];//计算出减去当前值后的剩余值nBegin = nTemp + 1;nEnd = num.size() - 1;while (nBegin < nEnd){nAbs = abs(num[nBegin] + num[nEnd] - nRemain);//计算与目标值差值的绝对值if (nAbs < nClosest)//与最小绝对值进行比较{nClosest = nAbs;nResult = num[nBegin] + num[nEnd] + num[nTemp];}if (num[nBegin] + num[nEnd] < nRemain){nBegin++;}else if (num[nBegin] + num[nEnd] > nRemain){nEnd--;}else{return target;}}}return nResult;}};
0 0
- 和大神们学习每天一题(leetcode)-3Sum Closest
- 和大神们学习每天一题(leetcode)-3Sum
- 和大神们学习每天一题(leetcode)-Path Sum
- 和大神们学习每天一题(leetcode)-Two Sum
- 和大神们学习每天一题(leetcode)-4Sum
- 和大神们学习每天一题(leetcode)-Sum Root to Leaf Numbers
- 和大神们学习每天一题(leetcode)-Symmetric Tree
- 和大神们学习每天一题(leetcode)-Same Tree
- 和大神们学习每天一题(leetcode)-Add Binary
- 和大神们学习每天一题(leetcode)-Reverse Integer
- 和大神们学习每天一题(leetcode)-Sort Colors
- 和大神们学习每天一题(leetcode)-Palindrome Number
- 和大神们学习每天一题(leetcode)-ZigZag Conversion
- 和大神们学习每天一题(leetcode)-Valid Palindrome
- 和大神们学习每天一题(leetcode)-Valid Parentheses
- 和大神们学习每天一题(leetcode)-Remove Element
- 和大神们学习每天一题(leetcode)-Implement strStr()
- 和大神们学习每天一题(leetcode)-Climbing Stairs
- 各种log的加载过程
- VS2008 停止调试 后有几秒卡顿
- 股票数据的获取方法(转载)
- 《C语言及程序设计初步》网络课程主页
- java.util.ResourceBundle读取配置文件
- 和大神们学习每天一题(leetcode)-3Sum Closest
- 微信支付的坑 返回值 -1
- sql 增加数据库字段
- 页面中添加音视频
- EF-增删改查简单示例
- 蓝牙基本概念
- Bundler 用户指南
- Android OpenGL ES 开发教程 从入门到精通
- vc++访问Mysql编程实例