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

Leetcoed 双指针

三数之和

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

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

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

输入: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] 。
注意,输出的顺序和三元组的顺序并不重要。
class Solution:def threeSum(self, nums: List[int]) -> List[List[int]]:result = [] # sort() 一下就很灵性啊nums.sort()for i in range(len(nums)):if nums[i] > 0:breakif i > 0 and nums[i] == nums[i-1]:continueleft = i + 1right = len(nums) - 1while left < right:if nums[i] + nums[left] + nums[right] > 0:right -= 1elif nums[i] + nums[left] + nums[right] < 0:left += 1else:# 先把这个结果给加上,再考虑left和right去重的问题result.append([nums[i], nums[left], nums[right]])left += 1right -= 1# 开始处理left和right的去重细节# 这里也类似前面的i, 要和之前已经处理过的数据比较# 这里同时要保证left小于right,不然容易越界,也没必要做任何操作# 这里要用while处理,因为可能连续的好几个while left < right and nums[left] == nums[left-1]:left += 1while left < right and nums[right] == nums[right+1]:right -= 1return result  
http://www.lryc.cn/news/264506.html

相关文章:

  • 关于“Python”的核心知识点整理大全31
  • 第1章 SpringBoot开发入门
  • 利用prometheus+grafana进行Linux主机监控
  • 单词反转(字符串)
  • 【Java 集合】LinkedBlockingDeque
  • 【hacker送书第3期】OpenCV轻松入门:面向Python(第2版)
  • 手把手教你isPalindrome 方法在密码验证中的应用
  • drf入门规范(二)
  • 使用Redis和Nginx分别实现限制接口请求频率
  • ansible模块 (7-13)
  • MySQL概括与SQL分类
  • 微信小程序:wx:for 获取view点击的元素currentTarget.dataset为空
  • Word的兼容性问题很常见,禁用兼容模式虽步不是最有效的,但可以解决兼容性问题
  • 环境搭建及源码运行_java环境搭建_idea版本下载及安装
  • jvm相关命令操作
  • 芋道前端框架上线之后发现element-ui的icon图标全部乱码
  • 每个伦敦金投资者都应该练习的日线图交易
  • 高通平台开发系列讲解(USB篇)adb应用adbd分析
  • 【上海大学数字逻辑实验报告】七、中规模元件及综合设计
  • JVM内存结构Java内存模型Java对象模型
  • Istio 社区周报(第一期):2023.12.11 - 12.17
  • 质量图导向法解包裹之---计算边缘可靠性
  • C# WPF上位机开发(进度条操作)
  • vulnhub-Tre(cms渗透)
  • Re解析(正则表达式解析)
  • HTML输出特殊字符详细方法
  • 《漫画算法》笔记——计算两个大数的和
  • Python3.13版本改进规划
  • aws配置以及下载 spaceNet6 数据集
  • 进阶之路:高级Spring整合技术解析