3Sum最接近C ++

假设我们有一个具有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

    例子(C ++)

    让我们看下面的实现以更好地理解-

    #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