class Solution:
def threeSumClosest(self, nums: List[int], target: int) -> int:
nums.sort()
n=len(nums)
ans=0
min_diff=inf # infinite 无穷
for i in range(n-2):
tmp=nums[i]
l=i+1
r=n-1
while l<r:
s=tmp+nums[l]+nums[r]
if s==target:
return s
elif s>target:
r-=1
else:
l+=1
if abs(s-target)<min_diff:
min_diff=abs(s-target)
ans=s
return ans
C++
class Solution {
public:
int threeSumClosest(vector<int>& nums, int target)
{
sort(nums.begin(),nums.end());
int ans=0;
int n=nums.size();
int min_diff=INT_MAX;
for(int i=0;i<n-2;i++)
{
int tmp=nums[i];
int l=i+1;
int r=n-1;
while(l<r)
{
int s=tmp+nums[l]+nums[r];
if(s==target) return s;
else if(s>target)
{
r-=1;
if(s-target<min_diff)
{
min_diff=s-target;
ans=s;
}
}
else
{
l+=1;
if(target-s<min_diff)
{
min_diff=target-s;
ans=s;
}
}
}
}
return ans;
}
};
C语言
int cmp(const void *a,const void *b)
{
return *(int*)a-*(int*)b;
}
int threeSumClosest(int* nums, int numsSize, int target)
{
qsort(nums,numsSize,sizeof(int),cmp);
int ans=0;
int min_diff=1e7;
for(int i=0;i<numsSize-2;i++)
{
int tmp=nums[i];
int l=i+1;
int r=numsSize-1;
while(l<r)
{
int s=tmp+nums[l]+nums[r];
if(s==target) return s;
else if(s>target) r--;
else l++;
if(abs(s-target)<min_diff)
{
ans=s;
min_diff=abs(target-s);
}
}
}
return ans;
}