首页 > 其他分享 >[LeetCode]016-最接近的三数之和

[LeetCode]016-最接近的三数之和

时间:2023-01-05 21:12:51浏览次数:49  
标签:target nums int 三数 示例 016 LeetCode size

>>> 传送门

题目

给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。
返回这三个数的和。
假定每组输入只存在恰好一个解。

示例

示例1

输入:nums = [-1,2,1,-4], target = 1
输出:2
解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。

示例2

输入:nums = [0,0,0], target = 1
输出:0

提示

  • 3 <= nums.length <= 1000
  • -1000 <= nums[i] <= 1000
  • -104 <= target <= 104

题解

class Solution {
public:
    int threeSumClosest(vector<int>& nums, int target) {
        pair<int, int> res(INT_MAX, INT_MAX);  // {abs(target - threeSum), threeSum}
        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 && target <= nums[i] + nums[j] + nums[k - 1]) k -- ;
                int s = nums[i] + nums[j] + nums[k];
                res = min(res, make_pair(abs(target - s), s));
                if (j < k - 1) {
                    s = nums[i] + nums[j] + nums[k - 1];
                    res = min(res, make_pair(target - s, s));
                }
            }
        }
        return res.second;
    }
};

标签:target,nums,int,三数,示例,016,LeetCode,size
From: https://www.cnblogs.com/yuyork/p/17028858.html

相关文章