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(n^2^),其中 n 是数组 nums 的长度。我们首先需要 O(nlogn) 的时间对数组进行排序,随后在枚举的过程中,使用一重循环 O(n) 枚举 a,双指针 O(n) 枚举 b 和 c,故一共是 O(n^2^)。

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

相关推荐
赔罪18 分钟前
C 语言变量说明符
c语言·开发语言·c++·学习·算法·objective-c
@小博的博客31 分钟前
C++初阶学习 第十二弹——stack与queue的介绍和使用
开发语言·数据结构·c++·学习
佑冰42 分钟前
C++ 矩阵旋转
数据结构·c++·算法·c
CYRUS STUDIO1 小时前
编译 LLVM 源码,使用 Clion 调试 clang
c语言·c++·visual studio·clang·ndk·llvm·clion
St_Ludwig1 小时前
C语言小撰特殊篇-assert断言函数
c语言·c++·后端·算法
益达爱喝芬达1 小时前
力扣11.23
数据结构·算法·leetcode
PaLu-LI1 小时前
ORB-SLAM2源码学习:Initializer.cc:Initializer::Normalize地图初始化——坐标归一化
c++·opencv·学习·算法·ubuntu·计算机视觉
秋说1 小时前
【数据结构 | C++】部落
数据结构·c++·算法
Sunyanhui11 小时前
力扣 无重复字符的最长字串-3
算法·leetcode·职场和发展
芥末虾2 小时前
【优选算法】KMP模式匹配算法 {算法介绍;算法原理:核心原理,如何求next数组;代码实现}
c语言·c++·算法·kmp·字符串模式匹配