LeetCode题解——3Sum Closest
题目:
给定一个数组,和一个指定的值,找出数组中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 };