16 3Sum Closest

来源:互联网 发布:ktv软件电脑版 编辑:程序博客网 时间:2024/05/18 03:54
class Solution {public:    int threeSumClosest(vector<int>& nums, int target) {        int n=nums.size();        int closest=nums[0]+nums[1]+nums[2];        sort(nums.begin(),nums.end());        for(int p=0;p<n-2;++p){            if(p>0&&nums[p]==nums[p-1]) continue;            int left=p+1;            int right=n-1;            while(left<right){                int m=nums[left]+nums[p]+nums[right];                if(abs(closest-target)>abs(m-target)){                    closest=m;                }                if(m==target){                    return target;                }else if(m<target){                    left++;                    while(left<right&&nums[left]==nums[left-1]){                        left++;                    }                }else{                    right--;                    while(left<right&&nums[right]==nums[right+1]){                        right--;                    }                }            }        }        return closest;    }};
0 0