1 class Solution { 2 public: 3 int threeSumClosest(vector<int>& nums, int target) { 4 int res,sum2,cursum2,curdiff,left,right; 5 int mindiff=INT_MAX; 6 int sz=nums.size(); 7 sort(nums.begin(),nums.end()); 8 for(int i=0;i<sz-2;i++){ 9 if(i>0&&nums[i]==nums[i-1]) 10 continue; 11 sum2=target-nums[i]; 12 left=i+1; 13 right=sz-1; 14 while(left<right){ 15 cursum2=nums[left]+nums[right]; 16 if(cursum2==sum2) 17 return target; 18 curdiff=abs(sum2-cursum2); 19 if(curdiff<mindiff){ 20 res=nums[i]+cursum2; 21 mindiff=curdiff; 22 } 23 if(cursum2<sum2){ 24 ++left; 25 while(left<right&&nums[left]==nums[left-1]) 26 ++left; 27 } 28 else{ 29 --right; 30 while(left<right&&nums[right]==nums[right+1]) 31 --right; 32 } 33 } 34 } 35 return res; 36 } 37 };
找和目标值最接近的三个数字和,类似三和问题,只是可以不用管数字重叠,并且要多设置一个统计最小差值的变量
浙公网安备 33010602011771号