16. 最接近的三数之和(LeetCode中等)(双指针)

16. 最接近的三数之和

class Solution {
public:
    int threeSumClosest(vector<int>& nums, int target) {
        //存放差值和数值和
        pair<int, int> res(INT_MAX, INT_MAX);
        sort(nums.begin(), nums.end());
        for(int i = 0; i < nums.size(); ++i){
            for(int j = i + 1, k = nums.size() - 1; j < 
            k; ++j){
                while(j < k - 1 && nums[i] + nums[j] + nums[k-1] >= target) --k;
                int s = nums[i] + nums[j] + nums[k];
                res = min(res, make_pair(abs(s - target), s));
                if(j < k - 1){
                    s = nums[i] + nums[j] + nums[k-1];
                    res = min(res, make_pair(target - s, s));
                }
            }
        }

        return res.second;
    }
};
posted @ 2025-03-15 11:23  awei040519  阅读(12)  评论(0)    收藏  举报