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 };

 

posted @ 2014-06-03 23:12  阿杰的专栏  阅读(105)  评论(0编辑  收藏  举报