假设我们有一个具有n个整数和一个目标的nums数组。我们必须找到三个整数,以使总和最接近目标。我们将返回三个整数的和。我们可以假设每个输入将只有一个解决方案。因此,如果给定数组类似于[-1,2,1,-4]并且目标为1,则三元组将为[-1,2,1],它的最接近总和为2。
为了解决这个问题,我们将遵循以下步骤-
对数组nums进行排序,ans:= 0,diff:= Infinity,n:= nums的大小
对于i,范围为0至n – 1
temp:= nums [left] + nums [right] + nums [i]
如果| target – temp | <diff,然后是ans:= temp和diff:= | target – temp |
如果temp =目标,则返回temp,否则返回temp> target,然后向右减小1,否则向左增大1
左:= i + 1,右:= n – 1
而左<右
返回ans
让我们看下面的实现以更好地理解-
#include <bits/stdc++.h> using namespace std; class Solution { public: int threeSumClosest(vector<int>& nums, int target) { sort(nums.begin(), nums.end()); int ans = 0; int diff = INT_MAX; int n = nums.size(); for(int i = 0; i < n; i++){ int left = i + 1; int right = n - 1; while(left < right){ int temp = nums[left] + nums[right] + nums[i]; if(abs(target - temp) < diff){ ans = temp; diff = abs(target - temp); } if(temp == target)return temp; else if(temp > target) right--; else left++; } } return ans; } }; main(){ Solution ob; vector<int> v = {-1,2,1,-4}; cout << ob.threeSumClosest(v, 1); }
[-1,2,1,-4] 1
输出结果
2