首页 > 编程语言 >15. 三数之和C++

15. 三数之和C++

时间:2024-02-23 15:25:24浏览次数:30  
标签:15 tem nums 三数 back C++ tail vector push

先排序,再暴力找就好了。如果当前元素大于0或者前两个元素和大于0就不用找了。然后结果超时了。

然后借鉴了双指针的解法,发现双指针其实就是把单向循环优化成双向循环。

 

class Solution {
public:
    vector<vector<int>> threeSum(vector<int>& nums){
        sort(nums.begin(),nums.end());
        vector<vector<int>> v;
        for(int i=0;i<nums.size()-2;i++){
            if(nums[i]>0||nums.size()<3) break;
            if(i!=0 && nums[i]==nums[i-1]) continue;
            int head=i+1,tail=nums.size()-1;
            while(head <tail){
                if(nums[tail]<0) break;
                if(nums[i]+nums[head]+nums[tail]==0){
                    vector<int> tem;
                    tem.push_back(nums[i]);
                    tem.push_back(nums[head]);
                    tem.push_back(nums[tail]);
                    v.push_back(tem);
                    head++;
                    tail--;
                    while(head<tail && nums[head]==nums[head-1]) head++;
                    while(head<tail && nums[tail]==nums[tail+1]) tail--;
                }else if(nums[i]+nums[head]+nums[tail]>0){
                    tail--;
                    while(head<tail && nums[tail]==nums[tail+1]) tail--;
                }else{
                    head++;
                    while(head<tail && nums[head]==nums[head-1]) head++;
                }
            }
        }
        return v;
    }
};

结果:

 

标签:15,tem,nums,三数,back,C++,tail,vector,push
From: https://www.cnblogs.com/llllmz/p/18029609

相关文章

  • C++多线程 第九章 高级线程管理
    第九章高级线程管理注意:本章内容由于教材本身问题,例子存在较大问题.请自行在理解基础上重新设计.在大多数系统上面,为每个可以与其他任务并行执行的任务分配一个单独的线程是不切实际的.但线程池允许尽量充分利用硬件提供的并发性.在线程池帮助下,可以被并发执行的任务......
  • MDST150-16-ASEMI三相可控整流模块MDST150-16
    编辑:llMDST150-16-ASEMI三相可控整流模块MDST150-16型号:MDST150-16品牌:ASEMI正向电流(Id):150A反向耐压(VRRM):1600V正向浪涌电流:1200A正向电压(VF):1.30V引脚数量:5芯片个数:6芯片尺寸:MIL功率(Pd):大功率设备封装:M18工作温度:-55°C~150°C类型:整流模块、整流桥MDST150-16描述......
  • Mounriver工程转为C++(转载)
    注:文章为内部转载。1、右键要转换为C++的工程new->other,按下图选择点击next,按下图配置,点击FINSH。2、工程转换为C++之后,原有的设置都会变成默认的,需要重新添加。上图添加头文件路径。上图添加链接脚本路径。上图使用默认的桩函数。3、添加C++初始化函数,在启动文件调......
  • 文心一言 VS 讯飞星火 VS chatgpt (200)-- 算法导论15.2 4题
    四、用go语言,对输入链长度为n的矩阵链乘法问题,描述其子问题图:它包含多少个顶点?包含多少条边?这些边分别连接哪些顶点?文心一言:矩阵链乘法问题是一个经典的动态规划问题,其中给定一个矩阵链,我们需要确定一个乘法顺序,使得计算该链所需的总标量乘法次数最少。子问题图(也叫DAG,有......
  • C++动态内存分配探秘:new与malloc的关键差异及实例解析
     概述:在C++中,new和malloc均用于动态内存分配,但存在关键差异。new是C++运算符,能调用构造函数,返回类型明确;而malloc是C函数,仅分配内存,需手动类型转换。示例源代码生动演示了它们在构造函数调用和类型信息方面的不同。在C++中,new 和 malloc 都用于动态内存分配,但它们之间......
  • C++强制类型转换详解:四种操作符解析与实例演示
     概述:C++中的强制类型转换是实现数据类型间转换的关键机制,包括static_cast、dynamic_cast、const_cast和reinterpret_cast四种。这些操作符适用于不同的场景,通过实例源代码详细阐述了它们的使用方法和步骤。在C++中,强制类型转换是将一个数据类型的值转换为另一个数据类型的过......
  • C++ 第四节课 C和C++指针的区别 C的宏函数和C++内联函数的优缺点
    #include<iostream>//定义一个宏函数#defineADD(x,y)x+y;//宏函数具有速度快等特点但是写代码有些业务比较繁琐,所以C++中使用了内联函数优化//在定义函数前面添加一个inline把这个函数变成内联函数inlineintmax(intx,inty){returnx>y?x:y;}usi......
  • c++ 通过一个临时的空的智能指针(裸指针),交换两个智能指针(裸指针)的值,注意是交换值!!!!
    #include<iostream>#include<memory>usingnamespacestd;structParenTask//父亲{stringname{};};typedefshared_ptr<ParenTask>ParenTaskPtr;structSubTask:ParenTask//孩子{intuid{};};typedefshared_ptr<SubTask&g......
  • CF1530F
    CF1530F题解容斥问至少1行/列/对角线全为1的概率转化为求每行/列/对角线至少有1个0的概率总概率1减去他就是答案每行的状态相互独立考虑枚举列和对角线的状态,0表示存在0,1表示全是1根据列和对角线能推出每一行的状态每一行的状态乘积就是当前列/对......
  • M1 MacOS 配置C++环境时遇到的插件问题
    配置环境参照博客:https://www.cnblogs.com/BYGAO/p/15135609.html遇到问题:在Terminal--ConfigureDefaultBuildTasks--C/C++clang++这一步没有C/C++clang++选项。解决方法:shift+command+p打开搜索框,搜索SettingsSync:ShowSettings在IgnoredExtensions中打......