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 的长度。

相关推荐
yunbao00_9 分钟前
C++ 复习(一)
开发语言·c++
vvilkim10 分钟前
C++并发编程完全指南:从基础到实践
c++
feiyangqingyun17 分钟前
Qt/C++开发监控GB28181系统/警情订阅/目录订阅/报警事件上报/通道上下线
c++·qt·gb28181
江海余生1 小时前
C++11——右值引用&完美转发
c++·c++11
石去皿1 小时前
C++ 中的 `it->second` 和 `it.second`:迭代器与对象访问的微妙区别
开发语言·c++·算法·leetcode
菜狗想要变强1 小时前
C++ STL 入门:map 键值对容器
c++
繁星蓝雨2 小时前
Qt中数据结构使用自定义类————附带详细示例
数据结构·c++·qt·qmap·qset
利刃大大3 小时前
【网络编程】二、UDP网络套接字编程详解
网络·c++·网络协议·udp·socket·套接字
潇-xiao3 小时前
Qt 通过控件按钮实现hello world + 命名规范(7)
c++·笔记·qt
编程绿豆侠4 小时前
力扣HOT100之链表:146. LRU 缓存
leetcode·链表·缓存