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