15. 三数之和

简介: 15. 三数之和

15. 3Sum


想法

3个for循环的解法肯定是超时的,考虑使用双指针的方法。要特别注意的是不能重复。例如nums = [-1,0,1,2,-1,-4]有2个-1,需要将第二个-1组成的[-1,0,1]剔除。


基本解法

class Solution
{
public:
    vector<vector<int>> threeSum(vector<int> &nums)
    {
        vector<vector<int>> ans;
        int N = nums.size();
        sort(nums.begin(), nums.end());
        for (int first = 0; first < N - 2; first++)
        {
            if (nums[first] > 0)
            {
                return ans;
            }
            // first去重
            if (first > 0 && nums[first] == nums[first - 1])
            {
                continue;
            }
            int second = first + 1;
            int third = N - 1;
            while (second < third)
            {
                if (nums[second]+nums[third]>-nums[first])
                {
                    third--;
                }
                else if (nums[second]+nums[third]<-nums[first])
                {
                    second++;
                }
                else
                {
                    ans.push_back({nums[first], nums[second], nums[third]});
                    second++;
                    third--;
                    // second去重
                    while (second < third && nums[second] == nums[second - 1])
                    {
                        second++;
                    }
                    //third去重
                    while (third > second && nums[third] == nums[third + 1])
                    {
                        third--;
                    }
                }
            }
        }
        return ans;
    }
};


这里的双指针是同时滑动的,也就是说比较后2数与首数的大小关系,大于首数说明整体大于0,所以要移动尾指针,反之亦然。这里有一个要注意的点是,当我使用int s = nums[first] + nums[second] + nums[third],然后比较s与0的大小关系时,总有3个判例超时。后来不写这一步,直接nums[first] + nums[second] + nums[third]与0比较就能通过。就挺离谱的。

目录
相关文章
|
4月前
|
机器学习/深度学习 人工智能 算法
脑肿瘤识别目标检测数据集(1200张图片已划分、已标注)| AI训练适用于目标检测任务
本数据集含1200张高质量脑部MRI影像,已精准标注“阴性/阳性”二分类标签,并划分训练集与验证集,适用于YOLO、ResNet等模型的脑肿瘤自动识别与辅助诊断任务,结构规范、即取即用。
|
4月前
|
机器学习/深度学习 传感器 数据采集
告别死记硬背,这篇机器学习“黑话”指南让你秒变内行
本 glossary 以工业制造为隐喻,系统梳理机器学习全链路核心概念:从数据预处理(特征工程、归一化、降维等)、主流算法(SVM、CNN、Transformer等),到训练优化(损失函数、反向传播、正则化)、模型评估(混淆矩阵、F1、AUC)及工程部署(MLOps、边缘推理)。共52个术语,兼顾准确性与可理解性,助力快速掌握ML知识体系。(239字)
545 4
|
存储 监控 安全
Zabbix登录绕过漏洞复现(CVE-2022-23131)
最近在复现zabbix的漏洞(CVE-2022-23131),偶然间拿到了国外某公司zabbix服务器。Zabbix Sia Zabbix是拉脱维亚Zabbix SIA(Zabbix Sia)公司的一套开源的监控系统。该系统支持网络监控、服务器监控、云监控和应用监控等。Zabbix Frontend 存在安全漏洞,该漏洞源于在启用 SAML SSO 身份验证(非默认)的情况下,恶意行为者可以修改会话数据,因为存储在会话中的用户登录未经过验证。 未经身份验证的恶意攻击者可能会利用此问题来提升权限并获得对 Zabbix 前端的管理员访问权限。
2332 0
Zabbix登录绕过漏洞复现(CVE-2022-23131)
|
3月前
|
数据采集 人工智能 Shell
从脚本到智能定时任务:Crontab MCP Tool 与 DMXAPI
Crontab MCP Tool 是被严重低估的LLM基础设施:它不替代cron,而是为大模型提供稳定、可审计的时间驱动入口。在夜间巡检等场景中,它将数据采集、结构化推理与通知链路解耦组合,强调确定性、可观测性与工程鲁棒性——让AI在边界清晰的流程中做擅长之事。(239字)
|
4月前
|
机器学习/深度学习 人工智能 监控
猪的危险行为数据集(5000+高清标注)| YOLO实战 智慧养殖与异常行为预警
本数据集开源5000+高清标注样本,精准覆盖猪只攻击、咬耳朵、咬尾巴三类危险行为,标注准确率≥98%,按7:1.5:1.5划分训练/验证/测试集,YOLO格式,兼容v5/v8/v11,支持智慧养殖实时预警与异常行为监测。
|
4月前
|
机器学习/深度学习 人工智能 算法
孪生素数分布的大规模计算实验:分段筛实现与经验统计分析
孪生素数猜想断言存在无穷多对形如 (p,p+2)(p,p+2) 的素数,但该猜想至今仍未解决。Hardy–Littlewood 的第一猜想给出了孪生素数计数函数的经典启发式渐近公式,而张益唐、Maynard 与 Polymath8 的工作则证明了存在无穷多对素数,其间隔有统一上界,但这一上界尚未降至 2 [1–3]。
556 13
|
算法 机器人 API
使用 XZ Utils 获得更高的压缩率
关于 XZ Utils XZ Utils 是为 POSIX 平台开发具有高压缩率的工具。它使用 LZMA2 压缩算法,生成的压缩文件比 POSIX 平台传统使用的 gzip、bzip2 生成的压缩文件更小,而且解压缩速度也很快。
1584 0
|
算法 开发工具 芯片
5.1 芯片SDK开发:创建初始SDK|学习笔记
快速学习5.1 芯片SDK开发:创建初始SDK
5.1 芯片SDK开发:创建初始SDK|学习笔记
|
Prometheus 运维 监控
Prometheus 服务发现和重新打标|学习笔记(一)
快速学习 Prometheus 服务发现和重新打标
691 0
Prometheus 服务发现和重新打标|学习笔记(一)
|
存储 缓存 运维
高可用互联网系统稳定性建设实践指南
自己以及带领团队曾经负责较多不同的互联网服务系统,如几十万应用数&亿级流量的云计算平台、年营收将近千亿的广告系统、亿级用户千万级日活的用户系统、亿级交易额的交易系统、算法在线离线工程系统等相关系统或子系统,整体而言无重大故障,达到定级故障数也很少,线上稳定性保障在一个不错的水位上。阶段性总结下我自己从团队技术负责人视角做好稳定性建设的实践性思考和简要思路,为感兴趣的技术同学提供一个实践指南。 我的团队稳定性建设思路包括了3大技术要素:良好的系统架构和实现、完备的团队研发运维流程机制、技术同学良好意识和能力,以及1个业务要素:良好的研发项目管理。
高可用互联网系统稳定性建设实践指南