元宝    LeetCode 18. 四数之和 Python3实现
LeetCode 18. 四数之和 — Python3 实现题目描述给你一个由“n” 个整数组成的数组“nums” 和一个目标值“target”。找出并返回满足下述全部条件且不重复的四元组“[nums[a], nums[b], nums[c], nums[d]]”“0 a, b, c, d n”“a, b, c, d” 互不相同“nums[a] nums[b] nums[c] nums[d] target”示例输入: nums [1,0,-1,0,-2,2], target 0输出: [[-2,-1,1,2],[-2,0,0,2],[-1,0,0,1]]解题思路排序 双指针核心思想四数之和 → 固定两个数 两数之和双指针排序数组两层循环固定前两个数“i” 和“j”用双指针“left” 和“right” 在剩余区间找两数之和去重跳过重复的枚举值Python3 代码class Solution:def fourSum(self, nums: List[int], target: int) - List[List[int]]:nums.sort()n len(nums)result []for i in range(n - 3): # 去重跳过相同的 nums[i] if i 0 and nums[i] nums[i - 1]: continue # 剪枝最小的四个数之和 target后面更大直接 break if nums[i] nums[i 1] nums[i 2] nums[i 3] target: break # 剪枝当前数 最大的三个数之和 target跳过 if nums[i] nums[n - 1] nums[n - 2] nums[n - 3] target: continue for j in range(i 1, n - 2): # 去重跳过相同的 nums[j] if j i 1 and nums[j] nums[j - 1]: continue # 剪枝最小的两数之和 剩余 target if nums[i] nums[j] nums[j 1] nums[j 2] target: break # 剪枝当前两数 最大两数 target跳过 if nums[i] nums[j] nums[n - 1] nums[n - 2] target: continue # 双指针查找剩余两数 left, right j 1, n - 1 while left right: total nums[i] nums[j] nums[left] nums[right] if total target: result.append([nums[i], nums[j], nums[left], nums[right]]) # 去重移动指针跳过相同值 while left right and nums[left] nums[left 1]: left 1 while left right and nums[right] nums[right - 1]: right - 1 left 1 right - 1 elif total target: left 1 else: right - 1 return result图解流程以“nums [1,0,-1,0,-2,2]”,“target 0” 为例排序后: [-2, -1, 0, 0, 1, 2]i0, nums[i]-2:j1, nums[j]-1:双指针 left2, right5 → sum -2-102 -1 0 → leftleft3, right5 → sum -2-102 -1 0 → leftleft4, right5 → sum -2-112 0 ✓ → [-2,-1,1,2]j2, nums[j]0:left3, right5 → sum -2002 0 ✓ → [-2,0,0,2]i1, nums[i]-1:j2, nums[j]0:left3, right5 → sum -1002 1 0 → right–left3, right4 → sum -1001 0 ✓ → [-1,0,0,1]结果: [[-2,-1,1,2], [-2,0,0,2], [-1,0,0,1]]去重与剪枝说明技巧 位置 作用去重 i/j 外层循环 避免同一元素重复使用去重 left/right 找到解后 避免重复四元组剪枝最小和 循环开头 提前终止不可能的情况剪枝最大和 循环开头 跳过太小的情况复杂度分析指标 值时间复杂度 O(n³) — 两层循环 双指针空间复杂度 O(log n) — 排序递归栈不计输出对比两数之和 → 四数之和问题 核心方法 时间复杂度两数之和 哈希表 O(n)三数之和 排序 双指针 O(n²)四数之和 排序 两层循环 双指针 O(n³) 通用套路“k” 数之和可以通过「固定“k-2” 个数 双指针」将复杂度降到 O(n^(k-1))

相关新闻

基于微信小程序的师生互动桥系统毕业设计项目源码

基于微信小程序的师生互动桥系统毕业设计项目源码

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/11/13 15:38:59 阅读更多 →
HyperMesh+STAR-CCM+ CFD仿真全流程:从网格划分到求解设置

HyperMesh+STAR-CCM+ CFD仿真全流程:从网格划分到求解设置

用 HyperMesh 做网格、再交给 STAR-CCM 做 CFD 仿真,是很多同学和刚接触仿真工作的工程师都会走的路线。这个组合的优点很明显:几何处理能力强、网格控制灵活、求解器设置相对容易上手。但常见的卡点也很集中:不知道网格做到什么程度算合格、…

2026/10/26 12:05:47 阅读更多 →
Python本地代码的远程提交

Python本地代码的远程提交

以前在学习C语言的时候了解到过本地代码的远程提交,也是在那时候了解到了gitee和github这两个平台,只不过由于C语言的学习半途而废,因而也逐渐忘记了远程提交的具体操作流程,今天重拾远程提交却是在Pycharm中进行,整个…

2026/10/26 12:05:50 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/13 5:13:25 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/13 5:13:25 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/13 5:13:25 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/12 18:22:26 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/12 18:22:25 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/13 5:13:25 阅读更多 →

日新闻

周新闻

月新闻