当前位置: 首页 > news >正文

leetcode 15. 三数之和

题目链接

给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j、i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请

你返回所有和为 0 且不重复的三元组。

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

示例 1:

输入:nums = [-1,0,1,2,-1,-4]
输出:[[-1,-1,2],[-1,0,1]]
解释:
nums[0] + nums[1] + nums[2] = (-1) + 0 + 1 = 0 。
nums[1] + nums[2] + nums[4] = 0 + 1 + (-1) = 0 。
nums[0] + nums[3] + nums[4] = (-1) + 2 + (-1) = 0 。
不同的三元组是 [-1,0,1] 和 [-1,-1,2] 。
注意,输出的顺序和三元组的顺序并不重要。
示例 2:

输入:nums = [0,1,1]
输出:[]
解释:唯一可能的三元组和不为 0 。
示例 3:

输入:nums = [0,0,0]
输出:[[0,0,0]]
解释:唯一可能的三元组和为 0 。

思路

双指针思想,i,l,r
先排序。
若nums[i] + nums[l] + nums[r] < 0 则让l向右移。
若nums[i] + nums[l] + nums[r] > 0 则让r向左移。
注意剪枝,若nums[i] > 0 ,则直接换i。
注意避重,若nums[i] == nums[i - 1],则直接换i,因为nums[i-1]已经把所有情况都找遍了,nums[i]只会重复。

Code

class Solution:
    def threeSum(self, nums: List[int]) -> List[List[int]]:
        nums.sort()
        ans = []
        for i in range(len(nums) - 2):
            l = i + 1
            r = len(nums) - 1
            
            while r != l:
                while nums[i] + nums[l] + nums[r] > 0:
                    r -= 1
                    if l == r:
                        break
                
                if l == r:
                    break  
                while nums[i] + nums[l] + nums[r] < 0:
                    l += 1
                    if l == r:
                        break
                
                if nums[i] + nums[l] + nums[r] == 0 and l != r:
                    res = [nums[i],nums[l],nums[r]]
                    res.sort()
                    if ans.count(res) == 0:
                        ans.append(res)
                    l += 1
        return ans
                
                    

相关文章:

  • SSL、TLS应用笔记
  • 学生信息表
  • 三天吃透计算机网络面试八股文
  • 【事务与锁】当Transactional遇上synchronized
  • 为什么 Python 没有 main 函数?
  • IP协议+以太网协议
  • C#基础之面向对象编程(二)
  • 无线WiFi安全渗透与攻防(八)之WEP-Hirte渗透WEP加密
  • 【Vue3实践】(一)Vue3搭建、路由配置与基本语法(模板、条件、循环、事件)
  • C++修炼之练气期第八层——内联函数
  • SpringMVC-0315
  • 【数论】最大公约数、约数的个数与约数之和定理
  • 解析带小数的字节流
  • Linux基础命令大全(下)
  • MySql分页查询性能优化
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • 【前端学习】-粗谈选择器
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • js
  • Linux快速复制或删除大量小文件
  • Promise初体验
  • rabbitmq延迟消息示例
  • Terraform入门 - 1. 安装Terraform
  • vuex 笔记整理
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • vue数据传递--我有特殊的实现技巧
  • XForms - 更强大的Form
  • 阿里云前端周刊 - 第 26 期
  • 给第三方使用接口的 URL 签名实现
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 我建了一个叫Hello World的项目
  • 译有关态射的一切
  • HanLP分词命名实体提取详解
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • 浅谈sql中的in与not in,exists与not exists的区别
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • (175)FPGA门控时钟技术
  • (27)4.8 习题课
  • (8)STL算法之替换
  • (a /b)*c的值
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (学习日记)2024.01.19
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • (转)GCC在C语言中内嵌汇编 asm __volatile__
  • .net 托管代码与非托管代码
  • [8-23]知识梳理:文件系统、Bash基础特性、目录管理、文件管理、文本查看编辑处理...
  • [AIGC] Nacos:一个简单 yet powerful 的配置中心和服务注册中心
  • [Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated c
  • [HITCON 2017]SSRFme perl语言的 GET open file 造成rce
  • [HTML]Web前端开发技术7(HTML5、CSS3、JavaScript )CSS的定位机制——喵喵画网页
  • [IDF]摩斯密码