伪代码:
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;
}
};
本文系作者原创,转载请注明出处。