给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。
参考了之前的三数之和的双指针算法,对撞指针思想。
class Solution { public: int threeSumClosest(vector<int>& nums, int target) { int min = INT_MAX; int result; if(nums.empty()) return 0; sort(nums.begin(), nums.end()); for(int i = 0; i < nums.size(); i++) { int fix = nums[i]; if(i > 0){ if(nums[i] == nums[i-1]) continue; } int left = i+1; int right = nums.size()-1; while(left < right) { if(nums[left]+nums[right]+fix == target ){ return target; } else if(nums[left]+nums[right]+fix > target){ int tmp = nums[left]+nums[right]+fix-target; if(min > tmp){ min = tmp; result = tmp+target; } right--; } else { int tmp = target - (nums[left]+nums[right]+fix); if (min > tmp){ min = tmp; result = target-tmp; } left++; } } } return result; } };