3Sum Closest

题目地址:https://oj.leetcode.com/problems/3sum-closest/

大概意思就是传入一个数组,和一个target,找到离target最近的三个数之和。

 

暴力的解法就是直接把所有3个数想加可能等于的和全部求出来,然后排序比对,这个复杂度n的2次方。

稍微简单的方法就是弄三个游标,游标a固定,游标b从a+1开始,游标c从vector.end开始,b从前往后移,c从后往前移。

下面是代码。

class Solution {
public:
    int threeSumClosest(vector<int> &num, int target) {
        int result =0;
        int min_gap=0x7fffffff;
        
        sort(num.begin(),num.end());
        
        if(num.size()==3)
        {
            return num[0]+num[1]+num[2];
        }
         for(vector<int>::iterator a=num.begin();a<num.end()-2;a++)
        {
            vector<int>::iterator c=num.end()-1;  
            vector<int>::iterator b=a+1;  
            
            while(b<c){      // b!=c  
                int sum=*a+*b+*c;  
                int gap=abs(sum-target);  
                if(sum<target)b=b+1;  
                if(sum>target)c=c-1;  
                if(sum==target) return sum;      
                if(gap<min_gap){  
                  result=sum;  
                  min_gap=gap; 
                }
            }
        }
        
         return result;  
        
        
    }
};
posted @ 2014-07-21 20:45  ian在这儿  阅读(192)  评论(0编辑  收藏  举报