16. 3Sum Closest

来源:互联网 发布:注册了com的域名能卖吗 编辑:程序博客网 时间:2024/06/05 19:17

1、题目描述

给一个数组和一个target,返回三个元素之和,使得该和与target最接近。


2、思路

与3sum类似,Two Pointers。

如果三数之和正好为target,则返回target。

如果三数之和与target之差的绝对值小于ans和target绝对值,则更新ans。

复杂度O(n^2)。


3、代码

int threeSumClosest(vector<int>& nums, int target) {        int ans=nums[0]+nums[1]+nums[2];        sort(nums.begin(),nums.end());        int n =nums.size();        for(int i=0;i<n;i++){            if(i==0||(nums[i]>nums[i-1])){                for(int j=i+1,k=n-1;j<k;){                    if(nums[j]+nums[k]+nums[i]==target){                        return target;                    }                    else if(nums[j]+nums[k]+nums[i]<target){                        if(abs(ans-target)>abs(nums[j]+nums[k]+nums[i]-target))                            ans = nums[j]+nums[k]+nums[i];                        j++;                    }                                            else{                        if(abs(ans-target)>abs(nums[j]+nums[k]+nums[i]-target))                            ans = nums[j]+nums[k]+nums[i];                        k--;                    }                                       }            }        }        return ans;    }