您的位置:首页 > 其它

【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,就不用再找了,直接退出,会很省时间。







内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: