首页 > 代码库 > LeetCode 3Sum Closest

LeetCode 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).
class Solution {public:    int threeSumClosest(vector<int> &num, int target) {        sort(num.begin(),num.end());       int min = INT_MAX;       int len = num.size();       int sum = 0;       int result = 0;       for(int i=0;i<len-2;i++)       {           int j = i + 1;           int k = len - 1;           while(j<k)           {               sum = num[i] + num[j] + num[k];               if(abs(sum-target) < min)                {                    min = abs(sum - target);                    result = num[i] + num[j] + num[k];                }                if(sum < target)j++;                if(sum > target)k--;                if(sum == target)                    return result;           }       }       return result;    }};

解题思路:最直观的想法,三次循环,时间复杂度o(n^3),显然不能接受。

    想到剪枝,在2次循环时,有很多情况是不必要走的,即如果得知num[i] + num[j] + num[k] > target的情况下,表明num[i] + num[m] + num[k] > target,其中m > j,同理还有小于的情况,于是复杂度可以降为o(n^2)

LeetCode 3Sum Closest