关闭

16. 3Sum Closest

43人阅读 评论(0) 收藏 举报
分类:

枚举+二分搜索

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;
    }
};


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:12037次
    • 积分:1413
    • 等级:
    • 排名:千里之外
    • 原创:135篇
    • 转载:6篇
    • 译文:0篇
    • 评论:0条