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