首页 > 其他分享 >第15题. 三数之和

第15题. 三数之和

时间:2024-03-17 18:32:12浏览次数:16  
标签:right 15 nums int 三数 三元组 vector left

第15题. 三数之和

力扣题目链接(opens new window)

给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。

注意: 答案中不可以包含重复的三元组。

示例:

给定数组 nums = [-1, 0, 1, 2, -1, -4],

满足要求的三元组集合为: [ [-1, 0, 1], [-1, -1, 2] ]

//双指针
class Solution {
public:
    vector<vector<int>> threeSum(vector<int>& nums) {
        vector<vector<int>>result;
        sort(nums.begin(),nums.end());
        for(int i=0;i < nums.size();i++){
            if(nums[i] > 0){
                return result;
            }
            if(i > 0 &&nums[i]==nums[i-1]){
                continue;//去重a
            }
            int left = i+1;
            int right = nums.size()-1;
            while(left<right){
            if(nums[i]+nums[left]+nums[right] > 0){right--;}
            else if(nums[i]+nums[left]+nums[right] < 0){left++;}
            else{//找到b,c
                result.push_back(vector<int>{nums[i],nums[left],nums[right]});//收集
                while(left<right&&nums[left]==nums[left+1]){//去重b
                    left++;
                }
                while(left<right&&nums[right]==nums[right-1]){//去重c
                    right--;
                }
                //找到答案,俩指针同时收缩
                right--;
                left++;
            }
            }
        }
        return result;
    }
};

 

标签:right,15,nums,int,三数,三元组,vector,left
From: https://blog.csdn.net/qq_62319385/article/details/136666872

相关文章

  • 圆锥曲线15
    思路简单,计算量过大的一题,强行堆砌计算量已知抛物线\(C:y^2=2x\)的焦点为\(F\),其准线\(l\)与\(x\)轴交于点\(P\),过点\(P\)的直线与\(C\)交于点\(A,B\)(\(A\)在\(B\)的左侧)(1)若点\(A\)是线段\(PB\)的中点,求\(A\)的坐标(2)若直线\(AF\)与\(C\)交于点\(D\),记\(\triangleBDP\)内......
  • 蓝桥杯单片机STC15F2K60S2第十三届省赛代码详细讲解(附完整代码)
     一、前言            在蓝桥杯单片机的比赛当中,很多传感器都是会经常使用到的,比如说DS18B20和DS1302等,都是会经常用到的,所以我们要把这些传感器都学会一下。在省十三的蓝桥杯单片机题目中,我自己也写了一下这个代码,可能有些地方会有点问题,但是大致的功能还是能......
  • 题目 2154: 取余运算
    题目描述:输入b,p,k的值,求b^pmodk的值。其中b,p,k×k为长整型数。解题思路:如果指数为奇数,那么结果乘以当前的底数,指数除以2(整除运算)。如果指数为偶数,那么底数变为原来底数的平方,指数除以2。代码:分治算法packagelanqiao;importjava.math.BigInteger;importjava.util......
  • 3.15毕设
    前面的HelloWorld,只做了一个查询的Demo,这里尝试另外四种常见的操作。  前面所写的增删改查是存在问题的。主要问题就是冗余代码过多,模板化代码过多。例如,开发一个serDao,可能是下面这样: 引入Mapper,UserDao就基本上用不到了,因为框架已经帮我们做好了 ......
  • P3242 [HNOI2015] 接水果 抽象做法
    好吧好吧,自己做出来的第一道整体二分。省流:理解能力比较强的话直接拖到最后看算法流程吧。下面我们称输入时盘子的权值为“盘子的大小”,与文中使用的算法给盘子的赋权区分开。一堆询问第\(k_i\)小,考虑整体二分。先考虑外部过程。上整体二分板子,每次二分\(mid\),形象地把盘......
  • 首师大附中集训D6日报(20231215)-比赛总结部分
    爆零做t1上头了,状态设计思路没啥问题,但是把问题复杂化了,维护了然后下午又上头了,对着一坨矩阵调一下午,哎t2属于读题问题,完全没有意识到这个是最小生成树,所以转化能力真的很重要t3骗链部分,但是拿了堆维护,后来一看,复杂度爆了,得拿主席树t1,t2改掉了,t3留待后面吧,涉及一个四毛子有点......
  • 首师大附中集训D6日报(20231215)-题解部分
    T1是dp设fi0不含k的情况书fi1含k的情况数第一步优化:前缀和维护f两个数组的前缀和通过前缀转移第二步优化:发现前缀和能矩阵乘法优化,所以矩阵快速幂就可以说起来挺简单,式子也不算难推,但就特别难写,主要的难度在于设置矩阵上面T2不知怎么一直卡在35,但是打的总体上肯......
  • 代码随想录算法训练营第十一天| 20. 有效的括号 1047. 删除字符串中的所有相邻重复
    20.有效的括号https://leetcode.cn/problems/valid-parentheses/description/publicbooleanisValid(Strings){if(s==null)returntrue;Stack<Character>stack=newStack<>();for(inti=0;i<s.length();i++){......
  • 20240315,逻辑类型,条件和逗号,函数,数组
    刚好看到逻辑类型,今天早上有个很好玩的事情,一早上醒来圆圆的小狗跑到了床下,然后她说“你是不是打我的小狗了”我;”我没有,我什么都不知道””他的屁股都扁了“我:“我怎么知道,他的屁股扁了关我什么事"“你怎么知道他的屁股扁了”我“不是你说的嘛”“我诈你的”,然后走了......
  • 3.15pht做题笔记
    3.15pht做题笔记C考虑先枚举学生\(j\),再枚举问题\(x\),接着枚举该问题回答相同的同学\(i\)根据鸽巢原理,每个同学有效枚举的次数肯定不会超过\(O(nk)\),所以总复杂度是\(O(n^2k)\)D先想确定\(k\)之后怎么做,从\(1\)到\(n\)枚举\(a_1\)的位置,每次只会交换两组......