个人思路总结:
跟第15题一样,也是先对数组进行排序(从小到大)。然后遍历,采用双指针,时间复杂度o(n^2)
代码如下:
class Solution {
public:
int threeSumClosest(vector<int>& nums, int target) {
sort(nums.begin(),nums.end());
int closestnum = nums[0]+nums[1]+nums[2]; //为最接近值赋初值
for(int k=0;k<nums.size();k++)
{
int i=k+1,j=nums.size()-1; //双指针
while(i<j)
{
int threesum = nums[i]+nums[j]+nums[k];
if(abs(threesum-target)<abs(closestnum-target))
closestnum = threesum;
if(threesum>target) //如果大于目标值,可以选择减小三数之和,即右指针左移
j--;
else if(threesum<target) //如果大于目标值,可以选择增大三数之和,即左指针右移
i++;
else //如果等于,则直接返回
return target;
}
}
return closestnum;
}
};
本文介绍了一种解决三数之和最接近目标值问题的算法,通过先排序数组,然后使用双指针技术,实现了O(n^2)的时间复杂度。此算法在寻找三个数的组合,使其和最接近给定的目标值方面表现高效。

被折叠的 条评论
为什么被折叠?



