码迷,mamicode.com
首页 > 其他好文 > 详细

【leetcode】3Sum Closest

时间:2014-12-28 20:42:49      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:

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).
 
与 3Sum类似,只是需要添加一个变量distance,用来记录和target距离最小的a+b+c
 
 1 class Solution {
 2 public:
 3     int threeSumClosest(vector<int> &num, int target) {
 4        
 5         int n=num.size();
 6         sort(num.begin(),num.end());
 7        
 8         int i,j,k;
 9         int a,b,c;
10         int result;
11         int distance=INT_MAX;
12        
13         for(i=0;i<n-2;i++)
14         {
15             j=i+1;
16             k=n-1;
17            
18             while(j<k)
19             {
20                 a=num[i];
21                 if(i>0&&num[i]==num[i-1])
22                 {
23                     break;
24                 }
25                 b=num[j];
26                 if(j>i+1&&num[j]==num[j-1])
27                 {
28                     j++;
29                     continue;
30                 }
31                
32                 c=num[k];
33                 if(k<n-1&&num[k]==num[k+1])
34                 {
35                     k--;
36                     continue;
37                 }
38                
39                 if(a+b+c==target)
40                 {
41                     return target;
42                 }
43                 else if(a+b+c<target)
44                 {
45                     if(target-(a+b+c)<distance)
46                     {
47                         result=a+b+c;
48                         distance=target-result;
49                     }
50                     j++;
51                 }
52                 else if(a+b+c>target)
53                 {
54                     if((a+b+c)-target<distance)
55                     {
56                         result=a+b+c;
57                         distance=result-target;
58                     }
59                     k--;
60                 }
61             }
62         }
63        
64         return result;
65  
66        
67     }
68 };

 

【leetcode】3Sum Closest

标签:

原文地址:http://www.cnblogs.com/reachteam/p/4190351.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!