【刷题日记】15. 三数之和

news2024/11/15 9:23:06

15. 三数之和

两数之和可以用巧思也可以用map

三数之和会更加复杂一点,且这道题还需要考虑避免重复答案!

思路:

  1. 特判:检如果numsnull 或长度小于 3直接返回空数组。
  2. 排序:使用 sort对数组进行升序排序。就变成了(-x,0,x)这样子的顺序。
  3. 遍历数组:遍历数组确定第一个数cur=num【i】。如果当前数和前一个数相同跳过(去重);如果 cur 大于 0,直接 break,因为后面加上任何更大的数和都不会是 0了。
  4. 双指针:初始化两个指针 lr(分别指向cur后续数的最左和最右数)。进入 while 循环(条件是l<r),计算三数之和sum。
  • 如果 sum === 0:找到一个三元组,添加到结果 res 中。然后进行去重,移动左指针 l 和右指针 r,直到遇到不同的值。(这个很重要!!)
  • 如果 sum < 0:左指针 l++增加总和。
  • 如果 sum > 0:右指针 r--减少总和。

代码:

//排序+双指针
var threeSum = function (nums) {
    let res = [];
    let len = nums.length;
    if (nums == null || len < 3) return res;
    nums.sort((a, b) => a - b);//升序排序(-x,0,x从小到大)
    for (let i = 0; i < len; i++) {
        let cur = nums[i];//第一个数(当前数)
        if (nums[i] > 0) break;//和后面的数相加也不会会是0
        if (i > 0 && cur == nums[i - 1]) continue;//去重(注意要判断i>0,因为第一个数没有前一个数)
        let l = i + 1, r = len - 1;//双指针,当前数之后数的前后结点
        while (l < r) {
            const sum = nums[l] + nums[r] + cur;
            if (sum === 0) {
                res.push([cur, nums[l], nums[r]])
                while (l < r && nums[l] == nums[l + 1]) l++;//去重
                while (l < r && nums[r] == nums[r - 1]) r--;//去重
                l++;
                r--;
            } else if (sum < 0) {
                l++;
            } else {
                r--;
            }
        }
    }
    return res;
};

 注意,我这里一开始有想过,直接在找三元组的时候,对num用set去重,这样子是不行的,因为题目所说的:

指的是同一个位置的数不能重复出现在三元组中,只是下标不能相同,但不是值不能相同。

所以需要去重的是最终的组合,而不是值。

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

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

相关文章

OpenAI GPT o1技术报告阅读(4)- 填字游戏推理

✨继续阅读报告&#xff1a;使用大模型来学习推理(Reason) 原文链接&#xff1a;https://openai.com/index/learning-to-reason-with-llms/ 这次我们继续看一个填字游戏的案例。 我们先看下问题&#xff1a; 解决以下填字游戏&#xff1a; Across&#xff08;横向&#xff09…

Vue3中el-table组件实现分页,多选以及回显

el-table组件实现分页&#xff0c;多选以及回显 需求思路1、实现分页多选并保存上一页的选择2、记录当前选择的数据3、默认数据的回显 完整代码 需求 使用 dialog 显示 table&#xff0c;同时关闭时销毁el-table 表格多选回显已选择的表格数据&#xff0c;分页来回切换依然正确…

【手把手】Windows上安装Python,小白必看

🔗【下载Python】 打开浏览器,访问Python的官方网站: python下载地址 选择适合你系统的Python版本下载。建议下载最新的稳定版。 🔧【安装步骤】 双击下载的安装包,开始安装。 选择“Add Python to PATH”,这样可以让系统知道Python的位置。 点击“Install Now”,…

Java 内存模型(JMM)

JMM&#xff0c;全称 Java Memory Model &#xff0c;中⽂释义Java内存模型 1. 概述 对于 Java 程序员来说&#xff0c;在虚拟机⾃动内存管理机制下&#xff0c;不再需要像 C/C 程序开发程序员这 样为每⼀个 new 操作去写对应的 delete / free 操作&#xff0c;不容易出现内存…

使用Locust进行接口性能测试:关联与参数化技巧分析

Locust是一款开源的Python性能测试工具&#xff0c;它可以模拟大量并发用户对网站或者其他接口进行压力测试 1. 关联&#xff1a;精确模拟用户操作 在某些场景下&#xff0c;我们需要将之前请求的响应参数关联到后续请求中&#xff0c;以模拟用户操作。这在会话管理&#xff…

2024年中国电子学会青少年软件编程(Python)等级考试(一级)核心考点速查卡

考前练习&#xff1a; 2024年06月中国电子学会青少年软件编程&#xff08;Python&#xff09;等级考试试卷&#xff08;一级&#xff09;答案 解析-CSDN博客 2024年03月中国电子学会青少年软件编程&#xff08;Python&#xff09;等级考试试卷&#xff08;一级&#xff09;答…

MySQL 中的 UTF-8 与 UTF8MB4:差异解析

在 MySQL 数据库中&#xff0c;字符集的选择对于数据的存储和处理至关重要。其中&#xff0c;UTF-8 和 UTF8MB4 是两个常见的字符集选项。那么&#xff0c;它们之间到底有什么区别呢&#xff1f; 一、字符集简介 UTF-8 UTF-8&#xff08;8-bit Unicode Transformation Format&…

文献阅读(81)FACT

题目&#xff1a;FACT: FFN-Attention Co-optimized Transformer Architecture with Eager Correlation Prediction时间&#xff1a;2023会议&#xff1a;ISCA研究机构&#xff1a;清华 主要贡献 算法优化&#xff1a;提出了Eager Prediction (EP)&#xff0c;预测softmax前重…

线性系统分析

一、定义 (1)叠加性 若 且 则称该系统具有叠加性。 叠加性:系统的一个输入不影响系统对其他输入的响应。 (2)均匀性 若 对任意常数a下式都成立 则称该系统具有均匀性。 均匀性:系统能够保持对输入信号的缩放因子不变。 (3)线性系统 若一个系统同时具有叠加性和…

Web开发:基础Web开发的支持

1. 构建项目&#xff1a; 2.添加依赖 <!-- SpringBoot热部署支持(开发阶段使用)--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional></d…

头部姿态估计代码+教程

前言 头部姿态估计是计算机视觉中的一个具有挑战性的问题&#xff0c;因为它需要完成多个步骤。首先&#xff0c;我们需要在画面中定位人脸&#xff0c;然后识别出各种面部特征点。如今&#xff0c;当人脸正对摄像头时&#xff0c;识别人脸似乎是一个简单的任务。但问题在于&am…

个人为什么不能参与场外期权?也有办法可以开始交易!

今天带你了解个人为什么不能参与场外期权&#xff1f;也有办法可以开始交易&#xff01;由于监管政策、风险管理、市场透明度和适合性等因素&#xff0c;个人投资者在中国市场上不能参与场外期权交易。 个人为什么不能参与场外期权&#xff1f; 在中国市场上&#xff0c;个人…

Web+Mysql——MyBatis

MyBatis 目标 能够完成Mybatis代理方式查询数据能够理解Mybatis核心配置文件的配置 1&#xff0c;Mybatis 1.1 Mybatis概述 1.1.1 Mybatis概念 MyBatis 是一款优秀的持久层框架&#xff0c;用于简化 JDBC 开发 MyBatis 本是 Apache 的一个开源项目iBatis, 2010年这个项目由…

Python 从入门到实战23(属性property)

我们的目标是&#xff1a;通过这一套资料学习下来&#xff0c;通过熟练掌握python基础&#xff0c;然后结合经典实例、实践相结合&#xff0c;使我们完全掌握python&#xff0c;并做到独立完成项目开发的能力。 上篇文章我们讨论了类的定义、使用方法的相关知识。今天我们将学…

【HTTP】请求“报头”(Host、Content-Length/Content-Type、User-Agent(简称 UA))

Host 表示服务器主机的地址和端口号 URL 里面不是已经有 Host 了吗&#xff0c;为什么还要写一次&#xff1f; 这里的 Host 和 URL 中的 IP 地址、端口什么的&#xff0c;绝大部分情况下是一样的&#xff0c;少数情况下可能不同当前我们经过某个代理进行转发。过程中&#xf…

【JAVA开源】基于Vue和SpringBoot的蜗牛兼职平台

本文项目编号 T 034 &#xff0c;文末自助获取源码 \color{red}{T034&#xff0c;文末自助获取源码} T034&#xff0c;文末自助获取源码 目录 一、系统介绍1.1 平台架构1.2 管理后台1.3 用户网页端1.4 技术特点 二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景…

LinuxC高级作业2

1.整理思维导图 2.做一套笔试题 一&#xff1a; 1.cd .. mkdir dir1 cd dir1 touch file1 2.cp ~/mnt/dir1/ -r * ~/home/dir2/ 3.pwd 4.ls -l 5.ifconfig 6.top 10.find /usr -type f -name "*name*" 11.:wq 13.df -h 14.tar -xzvf tmp.tar.gz 15.sudo c…

我的数据库旅程:从迷茫到觉醒

我的数据库旅程&#xff1a;从迷茫到觉醒 《中国数据库前世今生》纪录片的上线&#xff0c;使我回顾了中国数据库技术的演进历程&#xff0c;也联想到了自己在这一领域的工作经历。数据库技术从80年代在中国的初步应用到如今蓬勃发展&#xff0c;贯穿了整个信息化进程。作为一名…

【Qt之·文件操作·类QTextStream、QDataStream】

系列文章目录 文章目录 前言一、概述1.1 QTextStream类1.2 QTextStream类的作用和用途 二、基本用法2.1 QTextStream成员函数2.2 QTextStream格式描述符、描述符方法2.3 QDataStream成员函数2.4 创建QTextStream对象并关联输入/输出设备&#xff08;如文件、标准输入/输出流等&…

EPSILON环境配置和本地测试

文章目录 一、环境配置1.1 拉取镜像构建容器1.2 在容器中安装常用的包1.3 安装依赖1.4 安装OOQP1.4.1 安装blas1.4.2 安装ma271.4.3 安装OOQP 1.5 安装Protobuf 二、本地编译测试2.1 拉取源码并编译2.2 X11转发docker图形化界面2.3 测试一个小例子 三、镜像 一、环境配置 宿主…