3Sum Closest

原创 2015年07月08日 20:07:37

描述
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).
中文:
返回最接近三个数据的result,确保是唯一的解。返回三个整数的和。

class Solution {  
public:  
    int threeSumClosest(vector<int> &num, int target) {  
        // Start typing your C/C++ solution below  
        // DO NOT write int main() function  
        int size = num.size();  
        if (size < 3)  
        {  
            return 0;  
        }  
        sort(num.begin(), num.end());   // 对于以下的处理过程必须事先排序,类似二分搜索  
        int result = 0;     // 记录最终结果  
        int distance = INT_MAX;    // signed int  
        int sum = 0;        // 中间结果  
        int i = 0, j , k ;  

        for(i = 0; i < size - 2; i++)    // 三元组的第一个元素一次遍历,范围为[0...n-3]  
        {  
            // 去重避免重复计算,如果和上次同则跳过  
            if (i > 0 && num[i] == num[i-1])  
            {  
                continue;  
            }  

            j = i + 1;  // 选定三元组第一个元素后,第二个元素从第一个元素的下一个位置开始考察  
            k = size - 1;   // 选定三元组第一个元素后,第三个元素从数组末尾开始考察  
            while (j < k)    // 三元组的后两个元素利用左右逼近来跳过效率,选定第一个元素后,其后的所有元素只需考察一遍  
            {  
                sum = num[i] + num[j] + num[k];  
                if (sum == target)  // 存在距离最近为0则直接返回,否则穷举选取非0最小距离  
                {  
                    return sum;  
                }  
                else if(sum < target)  
                {  
                    if((target - sum) < distance)  
                    {  
                        result = sum;  
                        distance = target - sum;  
                    }  
                    j = j + 1;  
                    // 避免重复计算,如果和上次同则跳过  
                    if (num[j] == num[j-1])  
                    {  
                        j = j + 1;  
                    }  
                }  
                else if(sum > target)  
                {  
                    if((sum - target) < distance)  
                    {  
                        result = sum;  
                        distance = sum - target;  
                    }  
                    k = k - 1;  
                    // 避免重复计算如果和上次同则跳过  
                    if (num[k] == num[k+1])  
                    {  
                        k = k -1;  
                    }  

                }  
            }  
        }  
        return result;  
    }  
};  
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

leetcode.16----------3Sum Closest

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

LeetCode #16 - 3Sum Closest

Given an array S of n integers, find three integers in S such that the sum is closest to a given num...
  • LawFile
  • LawFile
  • 2016年10月13日 09:05
  • 104

16. 3Sum Closest LeetCode题解

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

[LeetCode16]3Sum Closest

3Sum Closest Given an array S of n integers, find three integers in S such that the sum is closest t...
  • sbitswc
  • sbitswc
  • 2014年06月05日 04:51
  • 553

3Sum Closest

题目 Given an array S of n integers, find three integers in S such that the sum is closest to a gi...
  • Boyhou
  • Boyhou
  • 2013年07月21日 14:24
  • 1929

[leetcode: Python]16. 3Sum Closest

Given an array S of n integers, find three integers in S such that the sum is closest to a given num...
  • NXHYD
  • NXHYD
  • 2017年05月18日 16:39
  • 98

LeetCodet题解--16. 3Sum Closest(离给定值最近的三数之和)

链接 LeetCode题目:https://leetcode.com/problems/3sum-closest/ GitHub代码:https://github.com/gatieme...
  • gatieme
  • gatieme
  • 2016年04月04日 16:22
  • 1285

LeetCode 016 3Sum Closest

题目 Given an array S of n integers, find three integers in S such that the sum is ...
  • seawade
  • seawade
  • 2014年02月13日 22:46
  • 472

#16 3Sum Closest

题目链接:https://leetcode.com/problems/3sum-closest/ Given an array S of n integers, find three...

leetcode 16 3Sum Closest

问题https://leetcode.com/problems/3sum-closest/解法class Solution { public: int threeSumClosest(vect...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:3Sum Closest
举报原因:
原因补充:

(最多只允许输入30个字)