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).
先对数组进行排序,对于数组中的每一个数i,设置左右指针j,k分别指向其后面的一个数和数组最后一个数,当j<k时,求数i,j,k三者之和,如果其和target相等,直接返回target。如果其和target差值更小,更新最终的返回值。如果sum比target更大, 则j向左移动一位,反之,则sum比target更小,则j向右移动一位。最终返回和target差值最小的那个sum。
-
class Solution { public: int threeSumClosest(vector<int>& nums, int target) { sort(nums.begin(),nums.end()); int min=INT_MAX; int ret; for(int i=0;i<nums.size();i++){ int j=i+1; int k=nums.size()-1; while(j<k){ int sum=nums[i]+nums[j]+nums[k]; int dif=abs(sum-target); if(dif<min){ min=dif; ret=sum; } if(dif==0) return target; else if(sum>target) k--; else j++; } } return ret; } };