leetcode 16. 3Sum Closest (k-sum问题,two pointer)

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.

思路: 排序,然后two pointer,复杂度 O(n^2)

/* ***********************************************
Author :111qqz
Created Time :2017年04月13日 星期四 16时24分28秒
File Name :16.cpp
************************************************ */
class Solution {

public:

    int n;
    int threeSumClosest(vector<int>& nums, int target) {
	n = nums.size();
	sort(nums.begin(),nums.end());
	int mn = 0x3f3f3f3f;
	int x,y,z;
	for ( int i = 0 ; i <=n-3 ; i++)
	{
	    int head = i+1;
	    int tail = n-1;
	    int tar = target - nums[i];
	    while (head<tail)
	    {
		int cur = target-nums[i]-nums[head]-nums[tail];
		if (abs(cur)<mn)
		{
		    mn = abs(cur);
		    x = nums[i];
		    y = nums[head];
		    z = nums[tail];
		}
		if (nums[head]+nums[tail]==tar) return target;
		if (nums[head]+nums[tail]<tar) head++;
		else tail--;
	    }
	}
	return x + y + z;


        

    }

};