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】3Sum 解题报告

这道题凭我现有知识实在解答不上来,只好网上搜索解法,才发现 K Sum 是一类问题,但是网上没有比较简洁的代码,我想对于初学者来说,可能还是想先看看这道题怎么解,然后才有兴趣去看其扩展吧。 【题目】 ...
  • ljiabin
  • ljiabin
  • 2014年10月30日 16:00
  • 28074

数组之2Sum,3Sum,4Sum,3Sum closest总结

数组之two Sum  Two Sum 描述 Given an array of integers, find two numbers such that they add up to a s...
  • Lily_whl
  • Lily_whl
  • 2017年04月10日 20:39
  • 265

3Sum Closest问题及解法

问题描述: Given an array S of n integers, find three integers in S such that the sum is closest to a ...
  • u011809767
  • u011809767
  • 2017年03月07日 14:18
  • 61

算法设计——解决 3Sum 以及 3Sum Closest 问题

常写算法,多动脑,不会老! 3Sum问题: 若不考虑效率问题,则解决该问题的思路就很简单直接,三个 for 循环遍历穷举即可。一个优秀的程序员肯定不能忍受这么无脑的时间复杂度,于是先想到先对全...
  • huangfei711
  • huangfei711
  • 2018年01月06日 19:51
  • 33

找出序列中求和最接近于target的三个数 3Sum Closest

题目源自于leetcode。好题。 题目:Given an array S of n integers, find three integers in S such that the sum is c...
  • luckyjoy521
  • luckyjoy521
  • 2013年12月14日 15:36
  • 1533

LeetCode OJ算法题(十六):3Sum Closest

题目: Given an array S of n integers, find three integers in S such that the sum is closest to a ...
  • op_yu
  • op_yu
  • 2014年07月16日 20:46
  • 318

LeetCode 15 3Sum(3个数的和)

翻译给定一个有n个整数的数组S,是否存在三个元素a,b,c使得a+b+c=0? 找出该数组中所有不重复的3个数,它们的和为0。备注: 这三个元素必须是从小到大进行排序。 结果中不能有重复的3个数。例如...
  • NoMasp
  • NoMasp
  • 2015年10月17日 23:19
  • 3475

3Sum Closest(离目标值最近的三数之和)

Given an array S of n integers, find three integers in S such that the sum is closest to a given num...
  • yang20141109
  • yang20141109
  • 2016年04月27日 10:28
  • 229

和大神们学习每天一题(leetcode)-3Sum Closest

Given an array S of n integers, find three integers in S such that the sum is closest to a given num...
  • majunyangyang
  • majunyangyang
  • 2014年12月22日 14:21
  • 165

LeetCode 16 3Sum Closest(最接近的3个数的和)

翻译给定一个有n个整数的数组S,找出S中3个数,使其和等于一个给定的数,target。返回这3个数的和,你可以假定每个输入都有且只有一个结果。例如,给定S = {-1 2 1 -4},和target ...
  • NoMasp
  • NoMasp
  • 2015年10月18日 09:59
  • 3445
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:3Sum Closest
举报原因:
原因补充:

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