个人思路总结:
跟第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;
}
};