class Solution {
/*三数之和
每组数存在唯一得到答案
1.数组排序
2.双指针解法
a b c
先用一重循环枚举A
再用双指针枚举b c
int sum = target
如果sum比target大则让sum变小则c向左
反之b向右
b指向头指针 c指向尾指针
先要初始化一个answer 否则结果会停留在上一次的循环当中*/
每组数存在唯一得到答案
1.数组排序
2.双指针解法
a b c
先用一重循环枚举A
再用双指针枚举b c
int sum = target
如果sum比target大则让sum变小则c向左
反之b向右
b指向头指针 c指向尾指针
先要初始化一个answer 否则结果会停留在上一次的循环当中*/
public:
int threeSumClosest(vector<int>& nums, int 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;
}
};