LeetCode 15 三数之和

news2024/11/24 19:57:51

题目链接

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

题目解析

        // 1. 排序+双指针

        // 2. 固定一个值nums[i] 然后去剩下的位置去找 两数之和符合nums[j]+nums[k]是否等于-nums[i]

        // 3. 细节问题:由于题目中是不可以包含重复的三元组的,因此我们需要对我们所选的三个数进行去重

代码

class Solution 
{
public:
    vector<vector<int>> threeSum(vector<int>& nums) 
    {
        // 1. 排序+双指针
        // 2. 固定一个值nums[i] 然后去剩下的位置去找 两数之和符合nums[j]+nums[k]是否等于-nums[i]
        // 3. 细节问题:由于题目中是不可以包含重复的三元组的,因此我们需要对我们所选的三个数进行去重

        int n=nums.size();

        sort(nums.begin(),nums.end());
        vector<vector<int>> vv;
        vector<int> v;
        for(int i=0;i<n;)
        {
            int target=-nums[i];
            // 由于数组中的数据是升序的
            // 那么最小的数都是正数,那么后面的数都是正数
            // 因此就不可能会有三个数相加等于0
            if(nums[i]>0) break; // 当该值不符合情况直接跳出for循环
            int left=i+1,right=n-1;
            while(left<right)
            {
                int sum=nums[left]+nums[right];
                if(sum<target)
                {
                    left++;
                }
                else if(sum>target)
                {
                    right--;
                }

                // 当走到该位置的时候,那么这三个数就是符合条件的
                else
                {
                    v.clear();
                    v.push_back(nums[i]); v.push_back(nums[left]); v.push_back(nums[right]);
                    vv.push_back(v);
                    // vv.push_back({nums[i],nums[left],nums[right]});
                    left++;right--;
                    // 对两个指针进行去重
                    while(left<right&&nums[left]==nums[left-1]) left++;
                    while(left<right&&nums[right]==nums[right+1]) right--;
                }
               
            }
            // 对当前固定值进行去重
            i++;
            while(i<n&&nums[i]==nums[i-1])  i++;
        }
        return vv;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/979225.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

功率放大器的功能是什么功能

功率放大器是一种电子设备&#xff0c;用于放大输入信号的功率&#xff0c;并输出对应增强后的信号。功率放大器的功能主要包括增强信号的功率、保持信号的形状和质量、提供足够的电流和电压驱动负载&#xff0c;以满足不同应用需求。 功率放大器的主要功能是增强信号的功率。输…

阿里巴巴API接口解析,实现按关键字搜索商品

要解析阿里巴巴API接口并实现按关键字搜索商品&#xff0c;你需要进行以下步骤&#xff1a; 了解阿里巴巴API接口文档&#xff1a;访问阿里巴巴开放平台&#xff0c;找到API文档&#xff0c;了解阿里巴巴提供的API接口以及相关的参数、返回值等信息。注册开发者账号&#xff1…

远传水表和流量计的区别

远传水表和流量计是两种用于测量和控制水流的设备&#xff0c;虽然在某些方面有重叠的功能&#xff0c;但它们之间也有一些区别。下面我们将详细介绍这两种设备的区别。 一、定义和作用 远传水表是一种能够远程传输用水数据的水表&#xff0c;可以通过无线通信技术将数据传输到…

轻松解决Idea中maven无法下载源码

今天在解决问题的时候想要下载源码&#xff0c;突然发现idea无法下载&#xff0c;这是真的蛋疼&#xff0c;没办法查看原因&#xff0c;最后发现问题的原因居然是因为Maven&#xff0c;由于我使用的idea的内置的Bundle3的Maven&#xff0c;之前没有研究过本地安装和内置的区别&…

前端面试0906

// 请给出输出结果 function foo(){ console.log(a); } function bar(){ var a 3; console.log(this.a); foo(); } var a 2; bar(); 2 2 // 请从下面的问题中挑选3道进行回答 1. 防抖和节流分别是什么&#xff0c;一般用在什么场景&#xff1f; 防抖&#xff08;Debounc…

CocosCreator3.8研究笔记(七)CocosCreator 节点和组件的介绍

相信很多新手朋友&#xff0c;肯定会问&#xff0c;CocosCreator 中什么是节点&#xff1f;什么是组件&#xff1f; 一、什么是组件&#xff08;Component&#xff09;&#xff1f; Cocos Creator 3.8 的工作流程是以组件式开发为核心&#xff0c;即以组合而非继承的方式进行游…

安卓手机记事本数据转移到苹果手机上怎么操作?

国内有不少网友使用的手机都是小米、荣耀、OPPO、vivo等安卓手机&#xff0c;而再次更换手机时&#xff0c;就想要尝试一下不同的操作系统&#xff0c;例如更换一台苹果手机。不过在换手机之前&#xff0c;还有一件重要的事情需要去做&#xff0c;这就是安卓手机记事本数据转移…

RS485转0_20mA输出模块设计

文章目录 1. 简介2. 功能实现3. 测试4. 开源地址 1. 简介 结合以前发的文章&#xff0c;我们知道&#xff0c;模拟量输出有两种&#xff0c;一种是共地型&#xff0c;一种是共源型。 今天开源一款rs485隔离的转0-20ma输出模块的设计。 我设计模块的原因是为了测试公司的一款…

redis实战-redis实现分布式锁redisson快速入门

前言 集群环境下的并发问题 分布式锁 定义 需要满足的条件 常见的分布式锁 redis实现分布式锁 核心思路 代码实现 误删情况 逻辑说明 解决方案 代码实现 更为极端的误删情况 Lua脚本解决原子性问题 分布式锁-redission redisson的概念 快速入门 总结 前言 在…

Python之数值和内建函数

Python之数值和内建函数 内建常用数据类型 分类 数值型 int、float、complex、bool 序列sequence 字符串str、字节序列bytes、bytearray列表list、元组tuple 键值对 集合set、字典dict 取整 取整 int // round math.floor math.ceil说明&#xff1a;两条//斜杠是整除&…

(云HIS)云医院管理系统源码 SaaS模式 B/S架构 基于云计算技术

通过提供“一个中心多个医院”平台&#xff0c;为集团连锁化的医院和区域医疗提供最前沿的医疗信息化云解决方案。 一、概述 云HIS系统源码是一款满足基层医院各类业务需要的健康云产品。该系统能帮助基层医院完成日常各类业务&#xff0c;提供病患预约挂号支持、收费管理、病…

快速掌握高效批量分割长视频技巧,让你的视频制作更轻松

对于需要处理大量长视频的影视制作人员来说&#xff0c;视频分割是一项必不可少的任务。传统的视频分割方法需要手动进行&#xff0c;费时费力。今天&#xff0c;笔者将介绍一种快速批量分割长视频的方法&#xff0c;使用固乔智剪软件&#xff0c;提高视频制作效率。 1. 下载并…

C/C++内存布局——代码区、常量区、静态区(BSS段、Data段)

C/C内存分区 在C/C这种高级语言的层面看&#xff0c;一个程序的内存分区可以被分为&#xff1a;&#xff08;从低地址到高地址&#xff09;代码区、常量区、静态区&#xff08;已初始化&#xff08;BSS段&#xff09;、未初始化&#xff08;Data段&#xff09;&#xff09;、堆…

景区AR虚拟三维场景沉浸式体验成为新兴的营销手段

科技的迅速崛起正在改变我们的世界&#xff0c;旅游业也在这股浪潮中掀起了一场全新的变革。增强现实(AR)技术正成为旅行中的一股强大力量&#xff0c;通过增添趣味和交互性&#xff0c;为旅程注入了前所未有的活力。本文将带您深入了解AR如何为旅游带来全新的体验&#xff0c;…

Hystrix和Sentinel熔断降级设计理念

目录 1 基本介绍2 Hystrix信号量和线程池区别2.1 信号量模式2.2 线程池模式2.3 注意 3 Sentinel介绍 1 基本介绍 Sentinel 和 Hystrix 的原则是一致的: 当检测到调用链路中某个资源出现不稳定的表现&#xff0c;例如请求响应时间长或异常比例升高的时候&#xff0c;则对这个资源…

Qt开发_调用OpenCV(3.4.7)设计完成人脸检测系统

一、前言 近年来,人脸识别技术得到了广泛的应用,它可以在各种场景中实现自动化的人脸检测和识别,例如安防监控、人脸解锁、人脸支付等。 该项目的目标是设计一个简单易用但功能强大的人脸检测系统,可以实时从摄像头采集视频,并对视频中的人脸进行准确的检测和框选。通过…

【论文阅读】WATSON:通过聚合上下文语义从审计日志中抽象出行为(NDSS-2021)

Zeng J, Chua Z L, Chen Y, et al. WATSON: Abstracting Behaviors from Audit Logs via Aggregation of Contextual Semantics[C]//NDSS. 2021. TC_e3 trace、攻击调查、TransE、 以信息流为边界提取子图&#xff0c;为子图提取行为表示&#xff0c;进一步聚类&#xff0c;分析…

leetcode 655. 输出二叉树(java)

输出二叉树 题目描述代码演示 题目描述 难度 - 中等 leetcode 655. 输出二叉树 给你一棵二叉树的根节点 root &#xff0c;请你构造一个下标从 0 开始、大小为 m x n 的字符串矩阵 res &#xff0c;用以表示树的 格式化布局 。构造此格式化布局矩阵需要遵循以下规则&#xff1a…

【报错】 Cannot create property ‘showColumn‘ on number ‘-1‘

1、报错原因&#xff1a; 代码如下&#xff1a; 报错是因为&#xff1a;this.findObject(this.option.column, "thirdId")是一个number &#xff0c;没有.showColumn属性 2、修改代码 将其变成object属性就行了

智慧工厂的未来:数字孪生的多重应用

数字孪生技术在智慧工厂项目中具有广泛的应用&#xff0c;为生产制造提供了前所未有的机会和优势。下面将探讨数字孪生技术在智慧工厂项目中的多个应用场景。 数字孪生技术的首要应用之一是生产流程优化。通过将现实世界的工厂映射到数字孪生模型中&#xff0c;制造商可以模拟…