leetcode 16 最接近的三数之和

close标记最接近target的值
res表示三个整数之和
对数组进行排序后遍历0=< i <= nums.size() - 2 – 三个整数中的第一个整数
使用left right 左右两个指针进行遍历 – 三个整数中的其余两个整数

sum = nums[i] + nums[left] + nums[right]

如果sum与target之和小于close – 更新close
如果sum++left
如果sum>target –right

代码如下:

class Solution {
public:
    int threeSumClosest(vector<int>& nums, int target) {
        int res = nums[0] + nums[1] + nums[2];
        int close = abs(res - target);
        sort(nums.begin(), nums.end());
        for (int i = 0; i < nums.size() - 2; ++i) {
            int left = i + 1, right = nums.size() - 1;
            while (left < right) {
                int sum = nums[i] + nums[left] + nums[right];
                int newclose = abs(sum - target);
                if (close > newclose) {
                    close = newclose;
                    res = sum;
                }
                if (sum < target) ++ left;
                else --right;
            }
        }
        return res;
    }
};

你可能感兴趣的:(leetcode,leetcode,三数之和,16)