[LeetCode.16]最接近的三数之和

伪代码:

index从零到vector数组长度的大小-1逐级递增遍历

{

    j=index+1;k<vector数组长度的大小-1;   //注意:j从index+1开始,避免重复三数相加

    判断j小于k

    {

        判断三数之和与目标数的差与offset的大小

        {

              保存threeSum和offset;

        }

    j++/k--;

    }              

}

具体实现代码如下:

class Solution 
{
public:
    int threeSumClosest(vector<int>& nums, int target) 
    {
        sort(nums.begin(),nums.end());
        int offset=INT_MAX;
        int threeSum=0;
        for(int i=0;i<nums.size();i++)
        {
            int j=i+1,k=nums.size()-1;
            while(j<k)
            {
                if(nums[i]+nums[j]+nums[k]>=target)
                {
                    if(offset>nums[i]+nums[j]+nums[k]-target)
                    {
                        threeSum=nums[i]+nums[j]+nums[k];
                        offset=nums[i]+nums[j]+nums[k]-target;
                    }
                        
                    k--;
                }
                if(nums[i]+nums[j]+nums[k]<target)
                {
                    if(offset>target-nums[i]-nums[j]-nums[k])
                    {
                        threeSum=nums[i]+nums[j]+nums[k]; 
                        offset=target-nums[i]-nums[j]-nums[k];
                    }
                    j++;
                }
            }
        }
        return threeSum;
    }
};
本文系作者原创,转载请注明出处。

猜你喜欢

转载自blog.csdn.net/weixin_39460182/article/details/80211858