class Solution {
/*三数之和
每组数存在唯一得到答案
1.数组排序
2.双指针解法
a b c
先用一重循环枚举A
再用双指针枚举b c
int sum = target
如果sum比target大则让sum变小则c向左
反之b向右
b指向头指针 c指向尾指针
先要初始化一个answer 否则结果会停留在上一次的循环当中*/
public:
    int threeSumClosest(vector<int>& numsint target) {
    sort(nums.begin(),nums.end());
    int answer = nums[0]+nums[1]+nums[2];   //初始化answer
    int n = nums.size();
    int a,b = 0,c = nums.size()-1;
    for(int i =0;i<nums.size()-2;i++){
        if(i>0&&nums[i] == nums[i-1]){      //跳过重复的数字
            continue;
        }
        int j=i+1;int k = n-1;
        while(k>j){
            int sum = nums[i]+nums[j]+nums[k];
            if(abs(target-answer)>abs(target-sum)){answer = sum;}
            if(target>sum)
            {
               j++;
            }
            else if(target<=sum){
                k--;
            }
        }
    }
    return answer;
    }
};