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

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.lqws.cn/news/186553.html

相关文章:

  • 实践提炼,EtherNet/IP转PROFINET网关实现乳企数字化工厂增效
  • 正则持续学习呀
  • B站的视频怎么下载下来——Best Video下载器
  • Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
  • 2025年- H73-Lc181--22.括号生成(回溯,组合)--Java版
  • Git仓库的创建
  • 2025/6/6—halcon知识点总结
  • c++ set与multiset的介绍
  • SOC-ESP32S3部分:32-LVGL显示框架
  • 【笔记】旧版MSYS2 环境中 Rust 升级问题及解决过程
  • 从零实现STL哈希容器:unordered_map/unordered_set封装详解
  • 在 Kali 上打造渗透测试专用的 VSCode 环境
  • 单芯片电流采用电路分享
  • 基于nacos2.5.1的MCP服务端微服务项目开发环境配置简介
  • Komiko 视频到视频功能炸裂上线!
  • Kubernetes 从入门到精通-label标签
  • Caliper 配置文件解析:config.yaml
  • 贝叶斯深度学习!华科大《Nat. Commun.》发表BNN重大突破!
  • 04 Deep learning神经网络编程基础 梯度下降 --吴恩达
  • 一个WebRTC 分辨率动态爬升问题记录与解决过程
  • Kubernetes指标实现有效的集群监控和优化
  • 【单片机期末】串行口循环缓冲区发送
  • 单片机内部结构基础知识 FLASH相关解读
  • Flask 核心概念速览:路由、请求、响应与蓝图
  • 深入理解二叉搜索树:原理到实践
  • LeetCode 热题 100 74. 搜索二维矩阵
  • 【Linux基础知识系列】第十四篇-系统监控与性能优化
  • 使用VSCode开发Django指南
  • npm install的原理
  • 自制喜悦字贴