给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。
例如,给定数组 nums = [-1,2,1,-4], 和 target = 1. 与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).
class Solution { public: int threeSumClosest(vector<int>& nums, int target) { //我们需要:一个给定数,两个遍历数。那么就变成找两数之和的最值了 long long result=INT32_MAX; sort(nums.begin(),nums.end()); for(int i=0;i!=nums.size()-2;++i)//起码要三个数,最后2个没用 { if(i>0&&nums[i]==nums[i-1]) continue; int new_target=target-nums[i]; int j=i+1,k=nums.size()-1; while(j<k) { if (abs(nums[j] + nums[k] + nums[i] - target)<abs(result - target)) result = nums[j] + nums[k] + nums[i]; if (nums[j] + nums[k]+ nums[i]>target) k--; else if (nums[j] + nums[k]+ nums[i]<target) j++; else return nums[j] + nums[k] + nums[i]; } };