Leetcode16. 最接近的三数之和

Every day a Leetcode

题目来源:16. 最接近的三数之和

解法1:排序 + 双指针

对数组 nums 进行排序。

枚举 nums[i],在区间 (i, n - 1] 内使用双指针 l、r,维护 res = nums[i] + nums[l] + nums[r] 与 target 最接近的值。

代码:

cpp 复制代码
class Solution
{
public:
    int threeSumClosest(vector<int> &nums, int target)
    {
        int n = nums.size();
        int ans = nums[0] + nums[1] + nums[2];
        sort(nums.begin(), nums.end());
        for (int i = 0; i < n; i++)
        {
            int l = i + 1, r = n - 1;
            while (l < r)
            {
                int sum = nums[i] + nums[l] + nums[r];
                if (sum == target)
                    return sum;
                if (abs(sum - target) < abs(ans - target))
                    ans = sum;
                if (sum < target)
                    l++;
                else
                    r--;
            }
        }
        return ans;
    }
};

结果:

复杂度分析:

时间复杂度:O(n2),其中 n 是数组 nums 的长度。我们首先需要 O(nlogn) 的时间对数组进行排序,随后在枚举的过程中,使用一重循环 O(n) 枚举 a,双指针 O(n) 枚举 b 和 c,故一共是 O(n2)。

空间复杂度:O(logn),其中 n 是数组 nums 的长度。

相关推荐
梁下轻语的秋缘几秒前
每日c/c++题 备战蓝桥杯(全排列问题)
c++·算法·蓝桥杯·深度优先
虾球xz9 分钟前
游戏引擎学习第194天
c++·学习·游戏引擎
AredRabbit10 分钟前
vector<int> 的用法
c++·算法·vector
pilgrim5317 分钟前
【二刷代码随想录】双指针-数组相关题型、推荐习题
java·数据结构·算法·leetcode
m0_687399841 小时前
build cinecert/asdcplib to .so or .a
c++·ubuntu·dci
大草原的小灰灰1 小时前
C/C++回调函数实现与std::function和std::bind介绍
c语言·c++
大锦终2 小时前
详解list容器
c语言·开发语言·数据结构·c++·list
DA02212 小时前
C++轻量HeaderOnly的JSON库
开发语言·c++·json
热爱嵌入式的小许2 小时前
基于Linux C++多线程服务器 + Qt上位机开发 + STM32 + 8266WIFI的智慧无人超市
开发语言·c++·qt项目·linux项目·linux无人智慧超市·linux多线程服务器·单片机项目
weixin_445054722 小时前
力扣刷题-热题100题-第26题(c++、python)
c++·python·算法·leetcode