LeetCode刷题笔记--015. 三数之和

2023-11-08

题目描述:

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

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

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

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

分析:

一、首先对数组nums排序,从小到大。
二、定义三个指针i,j,k。i从左边遍历,并固定i,j也从左边遍历,k从右边遍历。即将三数之和问题转换为两数之和的问题。
三、考虑边界和去重。

代码:


class Solution:
    def threeSum(self, nums):
        """
        :type nums: List[int]
        :rtype: List[List[int]]
        """
        res = []
        n = len(nums)
        nums.sort()
        for i in range(n):
            if i > 0 and nums[i] == nums[i-1]:
                continue
            l, r = i+1, n-1
            while l < r:
                tmp = nums[i] + nums[l] + nums[r]
                if tmp == 0:
                    res.append([nums[i], nums[l], nums[r]])
                    l += 1
                    r -= 1
                    while l < r and nums[l] == nums[l-1]:
                        l += 1
                    while l < r and nums[r] == nums[r+1]:
                        r -= 1
                elif tmp > 0:
                    r -= 1
                elif tmp < 0:
                    l += 1
        return res

复杂度:

时间复杂度为O( n 2 n^2 n2),空间复杂度为O( n n n)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LeetCode刷题笔记--015. 三数之和 的相关文章

  • 外汇市场与交易系统读书笔记(1)

    本文为 外汇市场与交易系统 这本书的读书笔记 1 a 汇率报价一般有五个数字 包括小输掉 其中 精度最高到小数点后四位 一般而言 我们以五个数字中的最低位作为基本点 b 外汇即期汇率报价一般包含买入汇率和卖出汇率 例如usd jpy的汇率可
  • 【知识积累】分析并实现O(N^2)的算法(对数器验证)

    1 选择排序 package com example demo algorithm import java util Arrays Description 选择排序 数据规模 N 0 N 1 看 比 交换 1 N 1 看 比 交换 2 N
  • SoC的开发

    怎么做SoC SoC是干啥的 SoC就是将CPU GPU Uart I2C WiFi Etherne等硬件IP连起来 做到一个芯片上 主要工作有 1 用verilog将这些IP core连起来 在verilog仿真器上进行验证 也要写一些C

随机推荐

  • Axure Repeater系列---排序

    最新学习整理Repeater 网上也能找到一些实现排序的帖子 但是对于不熟悉中继器的同学来说 直接上手还是有点难度的 我也遇到一些坑 特整理记录下来 共同学习 学习之前最好了解下中继器的各个属性以及函数的含义 工具 Axure8 0 学习目
  • 使用人声分离在线网站获得音乐

    有时候碰到一个广告中的音乐 觉得非常悦耳 想将它占为己有 使用到自己的片子中 但奈何其中有广告人声 想获得纯的音乐 如何做到呢 本文给出了方法 希望对你有用 注 本教程使用到了几个工具 1 fdm 下载片源 2 视频编辑大师 分离视频中的音
  • MySQL必知必会——第二十章更新和删除数据

    更新和删除数据 本章介绍如何利用UPDATE和DELETE语句进一步操纵表数据 更新数据 为了更新 修改 表中的数据 可以使用UPDATE语句 UPDATE的两种用法 更新表中特定行 更新表中所有行 不要省略WHERE子句 缺少WHERE子
  • 树莓派教程 - 2.1 树莓派USB摄像头 树莓派罗技免驱摄像头 fswebcam常用参数

    树莓派外接摄像头 最常用的有两种 CSI摄像头 USB摄像头 当然网络摄像头也是可以的 一般的USB摄像头都是UVC免驱的 而且可以方便的插拔和安装 平时最为常用 一 硬件设备 usb摄像头使用的 罗技c310 只要是UVC免驱就可以 二
  • QT实现聊天室

    qt实现聊天室 项目功能简介 1 连接 客户端 需要先连接服务器 就是输入服务器端的IP和端口连接服务器 如果连接成功 连接按钮显示文字会显示已连接 颜色变浅 2 注册 接下来是注册 如果申请的用户名还有人用户注册 则可以注册成功 如果之前
  • JS之instanceof详解

    instanceof 用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上 语法 object instanceof constructor object 某个实例对象 constructor 某个构造函数 用来检测
  • Github使用学习笔记(四)

    第四节任务 Github中奇怪的后缀文件都是什么 一 README md 1 README md的作用 在构建完整项目结构的根目录下应该有一个名为ReadMe的文件来说明当前版本源码结构或版本信息 如果你常看开源项目也会发现一个规律 在你拿
  • QuestMobile 2017年中国移动互联网年度报告

    来源 QuestMobile 2017年 科技的风口兜兜转转 从直播 VR到AI再到区块链 短视频泛娱乐IP 最终在2017年底定格在了知识付费上 然而这并没有结束 紧随知识付费而来的就是撒币 大撒币 这就是中国移动互联网的奇妙之处 再严肃
  • 2021-07-19王汕7.19国际黄金今日行情趋势分析,期货原油白银最新操作建议

    黄金行情走势分析 刚刚过去的一周 现货黄金冲高回落 美联储主席多次发表鸽派言论 多个国家新冠疫情回升 一度帮助金价创一个月新高至1834 12美元 盎司 散户和机构也看涨后市 但美国零售销售等数据表现靓丽 仍使投资者坚定美联储未来逐步收紧货
  • vue后端传值1和0怎么绑上对应得值?

    目录 前言 解决 前言 在做表格绑定后端返回得数据后 发现后端返回得有些字段值是0或者1等数字 但是我们在表格中需要展示得却是相对应得男 女 是 否等等 下面是我得解决办法 解决 我使用得是element ui库 后端返回得参数中是否签到字
  • 洛谷 P5715 三个数按照从小到大排序

    这是一个经典的例题 与比较两个数的大小的方式相同 建立一个中间变量 对数的大小进行排序 但不同的是 这个题在思路上较为复杂一点 思路 我们规定好输出的顺序从小到大依次是a b c 建立一个中间变量t 像比较两个数的大小的方法那样 对大小顺序
  • CAS,AQS,volatile,native,synchronized,lock关键字解读以及它们之间的联系(高频面试)

    1 CAS CAS比较并交换 没啥好说的 下面来说一下具体实现底层 CAS底层是由native修饰的 native是调用的本地C 代码Safe app类中的 lock IF MP方法 什么意思呢 就是说如果 IF 计算机是多核状态下 MP
  • ERROR: No matching distribution found for XXXXX 国内的镜像源来加速网络

    用国内的镜像源来加速网络 pip install 包名 i http pypi douban com simple trusted host pypi douban com 其中 trusted host pypi douban com 是
  • DLL地狱及其解决方案

    原作者 Ivan S Zapreev 概要 本文将要介绍DLL的向后兼容性问题 也就是著名的 DLL Hell 问题 首先我会列出自己的研究结果 其中包括其它一些研究者的成果 在本文的最后 我还将给出 DLL Hell 问题的一个解决方案
  • MySQL修改字段允许为空

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 环境 MySQL 5 1 命令行工具 问题 MySQL修改字段允许为空 解决 alter table topic modify state int 4 null 语法总结
  • org.apache.poi.poifs.filesystem.NotOLE2FileException: Invalid header signature;

    今天学习poi导入导出excel 然后报错valid header signature 经过排查是因为没有关闭流 workbook close 关闭之后就可以了
  • kafka常用命令汇总(亲测自用)

    文章目录 一 启动kafka 二 查看命令 三 创建topic 四 生产者 五 消费者 六 修改topic 七 删除topic 一 启动kafka kafka 2 13 3 3 1 zookeeper 3 4 14 2 13 3 3 1 前
  • 基础篇——Pycharm的安装与使用windows+ubuntu 初学者此篇够用

    简介 Pycharm是python编程过程中最为推荐的编辑调试软件之一 其使用简单 界面友好 也成了学习Python路上必须学会的软件之一 本篇教程简单介绍一下windows用户从安装到日常使用的基本功能 其他系统也可简单参考 软件安装 P
  • 嵌入式Linux学习笔记 1-14 异常与中断

    1 异常与中断的概念引入与处理流程 上图解释了何为中断何为异常 其中中断也是属于一种异常 引申拓展为ARM对异常 中断 的处理过程 1 初始化 1 设置中断源 让他可以产生中断 如某个按键可以产生中断的话 我们可以设置他的gpio引脚为中断
  • LeetCode刷题笔记--015. 三数之和

    题目描述 给定一个包含 n 个整数的数组 nums 判断 nums 中是否存在三个元素 a b c 使得 a b c 0 找出所有满足条件且不重复的三元组 注意 答案中不可以包含重复的三元组 例如 给定数组 nums 1 0 1 2 1 4