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

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.lryc.cn/news/2403340.html

相关文章:

  • HttpServletRequest常用方法
  • BugKu Web渗透之网站被hei(仅仅是ctf题目名称)
  • 群论在现代密码学中的应用探索与实践 —— 从理论到C语言实现
  • 深入理解MySQL死锁:从原理、案例到解决方案
  • 关于华为仓颉编程语言
  • 无字母数字webshell的命令执行
  • Spring AI 项目实战(五):Spring Boot + AI + DeepSeek + Redis 实现聊天应用上下文记忆功能(附完整源码)
  • 【华为云Astro-服务编排】服务编排使用全攻略
  • 解决el-select选择框右侧下拉箭头遮挡文字问题
  • 20250603在荣品的PRO-RK3566开发板的Android13下的使用命令行来查看RK3566的温度【显示优化版本】
  • C语言字符数组初始化的5种方法(附带实例)
  • npm run dev 报错:Error: error:0308010C:digital envelope routines::unsupported
  • 模板方法模式:优雅封装不变,灵活扩展可变
  • 基于LLaMA-Factory和Easy Dataset的Qwen3微调实战:从数据准备到LoRA微调推理评估的全流程指南
  • 6.6本日总结
  • idea中 maven 本地仓库有jar包,但还是找不到,解决打包失败和无法引用的问题
  • 安全编码规范与标准:对比与分析及应用案例
  • (33)课54--??:3 张表的 join-on 连接举例,多表查询总结。
  • 集群与分布式与微服务
  • 8.axios Http网络请求库(1)
  • Python爬虫实战:研究mechanize库相关技术
  • c++算法学习5——贪心算法
  • SpringCloud学习笔记-3
  • 【时时三省】(C语言基础)局部变量和全局变量
  • An improved YOLACT algorithm for instance segmentation of stacking parts
  • 使用API网关Kong配置反向代理和负载均衡
  • BugKu Web渗透之eval
  • DAY45 可视化
  • 11.RV1126-ROCKX项目 API和人脸检测画框
  • 超构光学与 AR 的深度融合 | 攻克 VAC 与眼动范围难题