16.最接近的三数之和

给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。

示例
给定数组 nums = [-1,2,1,-4], 和 target = 1.
与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).


这一题与上一题大致思路相似,都是使用头尾双指针进行判断优化

就是有一个绝对值函数的使用:

int abs(int t);

class Solution {
public:
    int threeSumClosest(vector<int>& nums, int target) {
        int res, temp, L, R;
        res = INT_MAX;
        sort(nums.begin(), nums.end());
        for(int i=0; i<nums.size()-2; i++){
            L = i+1; R = nums.size() - 1;
            while(L <R){
                temp = nums[i]+nums[L]+nums[R]-target;
                if(temp == 0)
                    return target;
                else if(temp > 0)
                    R--;
                else L++;
                res = abs(res)<abs(temp)? res:temp;
            }
        }
        return res+target;
    }
};
posted @ 2020-02-23 16:49  马尔尤尤  阅读(130)  评论(0编辑  收藏  举报