LeetCode 16.3Sum Closest (最接近的三数之和)

青旅半醒 2022-05-11 00:26 244阅读 0赞

题目描述:

给定一个包括 n 个整数的数组 nums和 一个目标值 target。找出 nums中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。

  1. 例如,给定数组 nums = [-121,-4], target = 1.
  2. target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).

Accepted C++ Solution:

  1. class Solution {
  2. public:
  3. int threeSumClosest(vector<int>& nums, int target) {
  4. vector<int> v(nums.begin(),nums.end());
  5. int n = 0;
  6. int ans = 0;
  7. int sum;
  8. sort(v.begin(),v.end()); //有序
  9. while(v.size() <= 3)
  10. return accumulate(v.begin(),v.end(),0);
  11. n = v.size();
  12. ans = v[0] + v[1] + v[2];
  13. for (int i = 0; i < n-2 ; i++) {
  14. int j = i+1; //后一个
  15. int k = n-1; //最后一个
  16. while(j<k) {
  17. sum = v[i] + v[j] + v[k];
  18. if (abs(target-sum) < abs(target-ans)) {
  19. ans = sum;
  20. if (ans == target) return ans;
  21. }
  22. (sum > target) ? k-- : j++;
  23. }
  24. }
  25. return ans;
  26. }
  27. };

发表评论

表情:
评论列表 (有 0 条评论,244人围观)

还没有评论,来说两句吧...

相关阅读