// @lc code=start classSolution { public: intthreeSumClosest(vector<int>& nums, int target){ int n = nums.size(); int best = 1e7; sort(nums.begin(), nums.end());
// 根据差值的绝对值更新答案 auto update = [&](int cur){ if(abs(cur-target) < abs(best-target)){ best = cur; } };
for(int i=0; i<n; ++i){ if(i>0 && nums[i]==nums[i-1]) continue; int l=i+1, r=n-1; while(l<r){ int sum = nums[i]+nums[l]+nums[r]; if(sum==target) return target; update(sum); if(sum<target){ int low = nums[l]; while(l<r && nums[l]==low) l+=1; } else{ int high = nums[r]; while(l<r && nums[r]==high) r-=1; } } } return best; } }; // @lc code=end