题目

给定一个数组,和一个指定的值,找出数组中3个数,它的和最接近这个指定值,并返回这个和。

 

解法

和上一题找3个数的和为0一样,先排序再遍历,这一次不需要记录路径。

 

代码

 1 class Solution {
 2 public:
 3     int threeSumClosest(vector<int> &num, int target) {
 4         int result, min_gap = INT_MAX;
 5         sort(num.begin(), num.end());  //先排序
 6         
 7         for(int a = 0; a < num.size() - 2; ++a)
 8             for(int b = a + 1, c = num.size() - 1; b < c; )
 9             {
10                 int sum = num[a] + num[b] + num[c];
11                 int gap = sum - target;
12                 
13                 if(gap == 0)  //找到相等的值,直接返回
14                     return target;
15                     
16                 if(abs(gap) < min_gap)
17                 {
18                     min_gap = abs(gap);
19                     result = sum;
20                 }
21                 
22                 if(sum > target)
23                     --c;
24                 else
25                     ++b;
26             }
27         return result;
28     }
29 };

 

相关文章:

  • 2021-11-29
  • 2021-08-08
  • 2022-12-23
  • 2022-12-23
  • 2021-09-24
  • 2022-12-23
猜你喜欢
  • 2021-12-04
  • 2021-10-16
  • 2022-01-07
  • 2022-02-25
  • 2021-05-24
  • 2021-05-31
  • 2022-02-25
相关资源
相似解决方案