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

python八股文算法:三数之和

双指针解法:
原理见注释

# 2025/6/6 9:40
# -*- coding:UTF-8 -*-
nums = [-1, 0, 1,1, 2, -1, -4,0,2,1,-3,4,10,-9]
def three_sum(nums):nums.sort()n = len(nums)result = []for i in range(n-2):# n-2,此时i取值到n-2-1,即倒数第3个数,此时才能保证倒数第3,倒数第2,倒数第1组成三个数的元组if i > 0 and nums[i] == nums[i-1]:continue# left right指针初始值:i+1,最后一个元素left, right = i+1, n-1while left < right:total = nums[i] + nums[left] + nums[right]# 如果和小于0,i不变,只能将left右移,因为已经排序了,往右的值会更大if total < 0:left += 1# 如果和大于0,i不变,只能将right左移,因为已经排序了,往左的值会更小elif total > 0:right -= 1# 等于0 直接加在result尾部else:result.append([nums[i], nums[left], nums[right]])# 一直到运行到此处往上,已经尝试了3个数字,需要再移动指针了,但在移动之前需要做一步去重操作,# 比如说nums=[1,2,2,3,-4]已经尝试了1,2,-4,和小于0,则需要移动left指针,即left指针下标加1,但下标加1后元素仍然是2# 所以没啥意义,需要去重,下标+1,至于移动的操作在去重完后统一加减。注意此处的+-1和while后+-1的区别while left < right and nums[left] == nums[left + 1]:left += 1while left < right and nums[right] == nums[right - 1]:right -= 1# 这里就是上述的统一加减的地方,也就是下一个循环的地方left += 1right -= 1return resultre = three_sum(nums)
print(re)

运行结果:

E:\TestData\suanfa\venv\Scripts\python.exe E:/TestData/suanfa/threesum.py
[[-9, -1, 10], [-4, 0, 4], [-4, 2, 2], [-3, -1, 4], [-3, 1, 2], [-1, -1, 2], [-1, 0, 1]]Process finished with exit code 0
http://www.xdnf.cn/news/12463.html

相关文章:

  • 前端~三维地图(cesium)地图遮罩蒙层
  • 货运车辆在高速公路上发生故障,应如何设置警示标志?
  • 山洪径流过程及洪水淹没数值模拟
  • JDK21 虚拟线程原理剖析与性能深度解析
  • 力扣面试150题--克隆图
  • 2025年服装收银系统推荐:助力服装商家高效经营
  • SDC命令详解:使用set_min_capacitance命令进行约束
  • hbuildx运行uzapp项目初始化配置
  • gid1 gid2 profileOwner
  • 使用 XState 状态机打造英语单词学习界面(demo)
  • 深入Kubernetes源码阅读指南核心概念- /pkg/api
  • 使用qsort函数对字符串中的星期名称进行排序
  • 30.【新型数据架构】-区块链数据架构
  • Java并发编程实战 Day 13:Fork/Join框架与并行计算
  • 如何解决 远程 合并冲突
  • Docker容器运行一段时间后GPU无法使用报错Failed to initialize NVML: Unknown Error
  • AFNetworking `setSecurityPolicy:` 方法源码解析及最佳实践
  • 以太网原理图设计和PCB设计deepseek
  • 三十三、面向对象底层逻辑-SpringMVC九大组件之HandlerExceptionResolver接口设计
  • 张量的理解
  • Python如何去除图片干扰
  • pp-ocrv5的关键改进PPHGNetV2_B4
  • java 异步
  • 2025-适用于Windows11Version 24H2的05累积更新,适合基于x64的系统(KB5058411) 安装错误-0x800f0831
  • 第四章 信息系统管理-4.1 管理方法
  • 正式上线!在 Sui 主网上使用 Nautilus 构建防篡改预言机
  • MCP是什么
  • STM32实战:数字音频播放器开发指南
  • DFT测试之TAP/SIB/TDR
  • 29.【新型数据架构】-边缘计算数据架构