侧边栏壁纸
博主头像
Hope博主等级

努力赚钱的工科研究生

  • 累计撰写 362 篇文章
  • 累计创建 129 个标签
  • 累计收到 5 条评论
标签搜索

LeetCode 16. 最接近的三数之和

Hope
2022-06-10 / 0 评论 / 0 点赞 / 499 阅读 / 750 字
温馨提示:
本文最后更新于 2022-06-10,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

LeetCode 16. 最接近的三数之和

思路:
用pair存两个关键元素,三个数与target差的绝对值和三个数的和,用pair存的好处是比较的时候按照第一个位置进行对比。
大概的思路与三数之和类似,在进行双指针操作的时候,最后还要判断一下在target的左侧的值,即三数之和是最后一个小于target的三个数。

代码:


class Solution {
public:
    int threeSumClosest(vector<int>& nums, int target) {
        pair<int,int> res = make_pair(INT_MAX,INT_MAX);
        int n = nums.size();
        sort(nums.begin(),nums.end());

        for(int i = 0; i < n; i++){
            if(i && nums[i] == nums[i - 1]) continue;
            for(int j = i + 1,k = nums.size() - 1; j < k; j++){
                if(j > i + 1 && nums[j] == nums[j - 1]) continue;
                while(j < k - 1 && nums[i] + nums[j] + nums[k - 1] >= target) k--;
                int sum = nums[i]+nums[j]+nums[k];
                res = min(res,make_pair(abs(sum- target),sum));
                //三数之和小于target
                if(j < k - 1) {
                    sum = nums[i]+nums[j]+nums[k - 1];
                    res = min(res,make_pair(abs(sum - target),sum));
                }
            }
        }
        return res.second;
    }
};
0

评论区