【LeetCode】16_3Sum Closest
2015-08-18 16:27
405 查看
题目
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).
[title2]解析[/title2]
方法类似3 sum,只不是这里加一个找最大值的操作而已。代码如下
class Solution {
public:
int threeSumClosest(vector<int>& nums, int target) {
sort(nums.begin(),nums.end());
int min = nums.at(0)+nums.at(1)+nums.at(2);
int ret =nums.at(0)+nums.at(1)+nums.at(2);
for (int i = 0; i<nums.size(); i++)
{
int j = i+1;
int k = nums.size()-1;
if (i>0 && nums.at(i)==nums.at(i-1))
{
continue;
}
while (j<k)
{
int tmp = nums.at(i)+nums.at(j)+nums.at(k);
if (tmp > target)
{
k--;
}
else if (tmp < target)
{
j++;
}
else
{
return target;
}
if (abs(tmp-target) < abs(min-target))
{
min = tmp;
}
}
}
return min;
}
};
看看大神们的
int threeSumClosest_16_BigGod(vector<int>& num, int target) {
int result = 0;
int min_gap = INT_MAX;
sort(num.begin(), num.end());
for (auto a = num.begin(); a != prev(num.end(), 2); ++a) {
auto b = next(a);
auto c = prev(num.end());
while (b < c) {
const int sum = *a + *b + *c;
const int gap = abs(sum - target);
if (gap < min_gap) {
result = sum;
min_gap = gap;
}
if (sum < target) ++b;
else --c;
}
}
return result;
}
也都差不多,不过感觉需要一个等于target的判断,万一等于target,就不用再找了,直接退出,会很省时间。
相关文章推荐
- [NOIP2011]数的划分
- 几个阿里笔试题
- soundpool的基本用法
- 认识Bootstrap
- android横竖屏控制
- JAVA中断迭代的几种方式
- iOS-如何将非ARC的项目转换成ARC项目
- session防止重复提交
- HTML服务器控件和WEB服务器控件的区别和联系介绍
- es all version
- asp.net+swfupload 多图片批量上传(附源码下载)
- Flex HTTPService
- 黑马程序员_集合_map集合以及集合工具类Collections
- 自动获取短信验证码
- 关于android ListView倒计时遇到的一些问题
- Algorithm negotiation fail 问题解决
- javascript学习笔记(一)-廖雪峰教程
- Linux下的tar压缩解压缩命令详解
- mysql5.5源码安装
- Flip Game(POJ_1753)