16. 3Sum Closest

枚举+二分搜索

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


阅读更多
个人分类: leetcode-array
上一篇15. 3Sum
下一篇18. 4Sum
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭