# [16. 3Sum Closest](https://leetcode.com/problems/3sum-closest/) # 思路 类似[15. 3Sum](https://leetcode.com/problems/3sum/),先对数组进行排序,外层循环就是遍历一遍数组,内层循环就是用两个指针low和high,与3sum不同的就是 每次循环要判断记录当前sum和target的差值。 时间复杂度O(n^2) # C++ ``` C++ class Solution { public: int threeSumClosest(vector& nums, int target) { int len = nums.size(); long long res=nums[0] + nums[1] + nums[2], min_gap, sum, curr_gap; // 防止溢出所以用long long型 min_gap = abs(res - target); sort(nums.begin(), nums.end()); for(int i = 0; i < len - 2; i++){ int low = i + 1, high = len - 1; while(low < high){ sum = nums[i] + nums[low] + nums[high]; curr_gap = abs(sum - target); if(curr_gap < min_gap){ res = sum; min_gap = curr_gap; } if(target < sum) high--; else if(target > sum) low++; else return target; } // low == high } return res; } }; ```