16 3Sum Closest(输出距离target最近的三个数的和Medium)

题目意思:给一个数组,给一个target,找三个数的和,这个和要与target距离最近,输出这个和

思路:这个题比3sum要稍微简单一点,如果需要优化,也可以去重,不过因为结果唯一,我没有去重。

   min abs(flag=num[i]+num[j]+num[k]-target),判断条件稍微调整,就是flag>0,则k--

   flag<0,则j++,flag=0,则返回target

 1 class Solution {
 2 public:
 3     int threeSumClosest(vector<int>& nums, int target) {
 4         int size=nums.size();
 5         if(size<3)return 0;
 6         int j,k;
 7         int distance,temp,answer;
 8         sort(nums.begin(),nums.end());
 9         distance=abs(nums[0]+nums[1]+nums[2]-target);
10         for(int i=0;i<size-2;++i){
11             j=i+1;
12             k=size-1;
13             while(j<k){
14                 temp=nums[i]+nums[j]+nums[k];
15                 if(distance>=abs(temp-target)){    //加等号,是解决nums长度为3的情况
16                     distance=abs(temp-target);
17                     answer=temp;
18                 }
19                 if(temp-target>0)k--;
20                 else if(temp-target<0)j++;
21                 else return target;
22             }
23         }
24         return answer;
25     }
26 };

 

posted @ 2015-06-23 14:34  影翕  阅读(306)  评论(0编辑  收藏  举报