3Sum Closest

大致思路还和3Sum一样:先排序,然后固定第一个数,后面的范围用两个指针确定,当大于目标值时,右指针左移,当小于目标值时,左指针右移。

需要注意的:第一每次改变三个数其中一个都要再次计算总和,判断。

 1 class Solution {
 2 public:
 3     int threeSumClosest(vector<int>& nums, int target) {
 4         int closet=0,j,k,sum=0;
 5         bool flag=false;
 6         sort(nums.begin(),nums.end());
 7         if(nums.size()<3)
 8         {
 9             int s=0;
10             while(nums[s])
11             closet+=nums[s++];
12             return closet;
13         }
14         for(int i=0;i<nums.size()-2;i++)
15         {
16          j=i+1;
17          k=nums.size()-1;
18          if(!flag)
19          {
20              flag=true;
21              closet=nums[i]+nums[j]+nums[k];
22          }
23          while(j<k)
24          {
25              sum=nums[i]+nums[j]+nums[k];
26              if(abs(sum-target)<abs(closet-target))
27              closet=sum;
28              if(sum<target) j++;
29              if(sum>target) k--;
30              if(sum==target) return target;
31              
32          }
33         }
34         return closet;
35     }
36 };
原文地址:https://www.cnblogs.com/daocaorenblog/p/5231522.html