LeetCode 3Sum Closest 最接近目标数的三个数和

来源:互联网 发布:cnc编程员工资高吗 编辑:程序博客网 时间:2024/05/06 06:45

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).

这道题和3Sum差不多,不过也有不一样的,主要是:

1 这里不用判断处理重复问题

2 要比较其中的三个数的和与目标数的差的大小。

 

 

class Solution {public:int threeSumClosest(vector<int> &num, int target){switch (num.size()){case 0: return 0;case 1:return num[0];case 2:return num[0] + num[1];default:break;}sort(num.begin(), num.end());int closet = 0;int sum = 0;int i = 0, j = 0, k = num.size()-1;int diff = INT_MAX;for (i = 0; i < k-1; i++){for (j = i+1; j < k;){sum = num[i] + num[j] + num[k];if (sum == target){return sum;}if (abs(sum-target) < diff){closet = sum;diff = abs(sum - target);}if (sum < target){j++;}else{k--;}}}return closet;}};



 

 

//2014-1-25 update8.24class Solution125 {public:int threeSumClosest(vector<int> &num, int target){int closest = INT_MAX;int res = 0;sort(num.begin(), num.end());for (int i = 0; i < num.size(); i++){for (int j = i+1, k = num.size()-1; j < k; ){int sum = num[i]+num[j]+num[k];if (sum == target) return sum;int t = abs(sum-target);if (t<closest){res = sum;closest = t;}if (sum < target) j++;else if (sum > target) k--;}while (i < num.size() && num[i] == num[i+1]) i++;}return res;}};

 

 

 

 

 

 

原创粉丝点击