LeetCode 3Sum Closest

Given an array S of n integers, find three integers in S such that the sum is closest to a given number, target. Return the sum of the three integers. You may assume that each input would have exactly one solution.

For example, given array S = {-1 2 1 -4}, and target = 1.

The sum that is closest to the target is 2. (-1 + 2 + 1 = 2).

 

先对数组排个序。枚举第一个数,然后设两个指针,在第一个数的后半段开始王中间收缩,if sum > target则右指针往左移, if sum < target则左指针往右移。

排序O(nlogn) + 查找O(n^2) = O(n^2)

 1 class Solution {
 2 public:
 3     int threeSumClosest(vector<int> &num, int target) {
 4         // Start typing your C/C++ solution below
 5         // DO NOT write int main() function
 6         sort(num.begin(), num.end());
 7         
 8         int ret;
 9         bool first = true;
10         
11         for(int i = 0; i < num.size(); i++)
12         {
13             int j = i + 1;
14             int k = num.size() - 1;
15             
16             while(j < k)
17             {
18                 int sum = num[i] + num[j] + num[k];
19                 if (first)
20                 {
21                     ret = sum;
22                     first = false;
23                 }
24                 else
25                 {
26                     if (abs(sum - target) < abs(ret - target))
27                         ret = sum;                                         
28                 }
29                 
30                 if (ret == target)
31                     return ret;
32                 
33                 if (sum > target)
34                     k--;
35                 else
36                     j++;
37             }
38         }
39         
40         return ret;
41     }
42 };
posted @ 2012-10-27 18:03  chkkch  阅读(5705)  评论(1编辑  收藏  举报