首页 > 其他分享 >【力扣15】三数之和

【力扣15】三数之和

时间:2024-09-11 20:51:34浏览次数:3  
标签:存储 15 nums 三数 三元组 力扣 vector res 指针

15. 三数之和 - 力扣(LeetCode)

双指针算法核心:有序(有序了才能使用双指针)因此,先排序,且保证 i<j<k 的顺序;顺序确定,双指针才能有序移动,可以将原本 o(n2) 复杂度降未 o(n)

双指针:先想暴力做法,再看有没有单调性,有单调性就用双指针

有三个数,但只有双指针,所以先枚举一个数;后两个数按照双指针,根据题目给定限制条件,划定双指针活动范围。

class Solution {
public:
    vector<vector<int>> threeSum(vector<int>& nums) {
        vector<vector<int>> res; //存储找到的三元组
        sort(nums.begin(), nums.end()); //排序,便于双指针
        for(int i = 0; i<nums.size(); i++){ //对i遍历
            if(i && nums[i]==nums[i-1]) 
                continue;// 跳过重复的元素
            //j、k双指针一前一后,且j始终在k前边;且控制左指针移动
            for(int j = i+1, k = nums.size()-1; j<k; j++){
                //j的位置、跳过重复元素
                if(j>i+1 && nums[j]==nums[j-1]) continue;
                //i、j已确定的情况下若和大于0,右指针该往前移动
                while(j<k-1 && nums[i]+nums[j]+nums[k-1]>=0) k--;
                //最终条件,将结果push入res中
                if(nums[i]+nums[j]+nums[k] == 0)
                    res.push_back({nums[i],nums[j],nums[k]});
            }
        }
        return res;
    }
};

二维数组,构成了一个矩阵,可以存储许多 多元组。每一个vector向量都可以存储一个数组,因此二维数组也可以存储三元组。

标签:存储,15,nums,三数,三元组,力扣,vector,res,指针
From: https://blog.51cto.com/u_16319570/11983715

相关文章

  • 力扣49 字母异位词分组 Java版本
    文章目录题目描述题解注意事项题目描述给你一个字符串数组,请你将字母异位词组合在一起。可以按任意顺序返回结果列表。字母异位词是由重新排列源单词的所有字母得到的一个新单词。示例1:输入:strs=[“eat”,“tea”,“tan”,“ate”,“nat”,“bat”......
  • P3515
    高效高效分块。here#include<bits/stdc++.h>usingnamespacestd;intn,a[500010];doubledp[500010],sqr[500010];doublew(intj,inti){ returndouble(a[j])+sqr[i-j];}voidwork(intl,intr,intL,intR){ if(l>r)return; intmid=l+r>>1,p; d......
  • P10315 解题报告
    题目传送门题目大意:有\(n\)个石碑,每个石碑有\(0\simm-1\)共\(m\)种状态,击打一个石碑会带动其他的石碑。若当前石碑的状态是\(s\),则击打或被带动后的状态为\((s+1)\bmodm\)。现给定这\(n\)个石碑的初始状态\(s_i\)、每个石碑带动的石碑及末状态\(t_i\),求每个......
  • 南沙C++信奥老师解一本通题: 1315:【例4.5】集合的划分
    ​ 【题目描述】【输入】给出n和k。【输出】n个元素a1,a2,……,an放入k个无标号盒子中去的划分数S(n,k)。【输入样例】106 【输出样例】22827 #include<iostream>usingnamespacestd;longlongSplit(intn,intplate)//等同于n个不同的数......
  • 用于营销的15种电子邮件类型
    你可能听过这些建议——发送个性化、有针对性的邮件,欢迎订阅者加入你的列表,识别客户的重要时刻和庆祝活动,等等。但你是否知道有不同类型的邮件可以帮助你实现这些目标呢?你不一定要全部使用,但这份列表可以帮助你找到与受众沟通的最佳方式。以下是15种适用于各种目的的营销邮件......
  • 五星级可视化页面(15):各类医疗场景下大屏页面
    可视化大屏在医疗领域有许多重要的价值和应用:1.数据监控和实时展示:可视化大屏可以用于监控医疗设备、患者数据、手术过程等,实时展示医疗数据的变化和趋势,帮助医护人员及时发现异常情况并做出相应的处理。2.医院运营管理:可视化大屏可以展示医院的运营数据,包括门诊量、......
  • 9.9 ~ 9.15
    9.9whk正常上课。感觉自己一到教室就困,怎么会是呢总不能是教室人太多缺氧了吧(OI我干啥了?我干啥了?我干啥了?9.10whk教师节。所以每节课上课之前我们都会起立并大喊“祝老师教师节快乐”;然后在奥赛课上也这么干了,给了\(\text{Huge}\)一点小小的震撼;Peppa_Even_Pig喊起......
  • SSM高校图书馆座位的智能化管理系统小程序-毕业设计源码15796
    摘要信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对高校图书馆座位的智能化管理系统小程序等问题,对高校图书馆座位的智能化管理系统小程序进行研......
  • 【算法题】22.括号生成-力扣(LeetCode)
    【算法题】22.括号生成-力扣(LeetCode)1.题目下方是力扣官方题目的地址22.括号生成数字n代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且有效的括号组合。示例1:输入:n=3输出:["((()))","(()())","(())()","()(())","()()()"]示例2:输入:n=1......
  • macOS Sequoia 15 RC (24A335) Boot ISO 发布下载,正式版下周公布
    macOSSequoia15RC(24A335)BootISO原版可引导镜像下载iPhone镜像、Safari浏览器重大更新、备受瞩目的游戏和AppleIntelligence等众多全新功能令Mac使用体验再升级请访问原文链接:https://sysin.org/blog/macOS-Sequoia-boot-iso/,查看最新版。原创作品,转载请保留出处......