news 2026/8/31 15:49:48

元宝 LeetCode 18. 四数之和 Python3实现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
元宝 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]]

    解题思路:排序 + 双指针

    核心思想:四数之和 → 固定两个数 + 两数之和(双指针)

    1. 排序数组
    2. 两层循环固定前两个数
      “i” 和
      “j”
    3. 用双指针
      “left” 和
      “right” 在剩余区间找两数之和
    4. 去重:跳过重复的枚举值

    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]

    i=0, nums[i]=-2:
    j=1, nums[j]=-1:
    双指针 left=2, right=5 → sum = -2-1+0+2 = -1 < 0 → left++
    left=3, right=5 → sum = -2-1+0+2 = -1 < 0 → left++
    left=4, right=5 → sum = -2-1+1+2 = 0 ✓ → [-2,-1,1,2]

    j=2, nums[j]=0:
    left=3, right=5 → sum = -2+0+0+2 = 0 ✓ → [-2,0,0,2]

    i=1, nums[i]=-1:
    j=2, nums[j]=0:
    left=3, right=5 → sum = -1+0+0+2 = 1 > 0 → right–
    left=3, right=4 → sum = -1+0+0+1 = 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))

    版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
    网站建设 2026/8/31 15:47:55

    PyInstaller打包Python脚本全攻略:环境准备、路径兼容与排查指南

    简介&#xff1a;这是一套面向Python初学者与中小型项目开发者的PyInstaller可视化高级打包工具集&#xff0c;专为降低脚本转可执行程序的门槛而设计&#xff0c;解决命令行参数繁杂、依赖处理困难、GUI/CLI模式切换不便等常见痛点。资源包共10个文件&#xff0c;包含6个可直接…

    作者头像 李华
    网站建设 2026/8/31 15:47:16

    分治与随机化:从复杂度分析到排序算法的思维框架

    有一次帮朋友准备算法笔试&#xff0c;他背了很多排序模板。从冒泡到快速排序&#xff0c;代码写得很熟练&#xff0c;但当我问他“快速排序的最坏情况什么时候出现”“归并排序为什么一定是 O(n log n)”时&#xff0c;他沉默了。 这不是个例。很多学习者的真实状态是&#x…

    作者头像 李华
    网站建设 2026/8/31 15:46:10

    计算机毕业设计之基于HTML5的物流配送系统设计与实现

    随着网络科学技术不断的发展和普及化&#xff0c;用户在寻找适合自己的信息管理系统时面临着越来越大的挑战。因此&#xff0c;本文介绍了一套物流配送系统&#xff0c;在技术实现方面&#xff0c;本系统采用JAVA、HTML、CSS、JS以及MySQL数据库编程&#xff0c;使用springboot…

    作者头像 李华
    网站建设 2026/8/31 15:45:35

    新手好上手AI界面设计的几个基础步骤

    正在制作AI漫剧或AI动画视频的小伙伴&#xff0c;给大家推荐这里&#xff1a;AIGC梦工厂&#xff08;www.aigcc.vip&#xff09;。Ai漫剧一站式成片。输入一句话进去就能一键成片&#xff1b;画布模式可以精修每一帧画面&#xff1b;还有500多种Ai图片玩法。有兴趣的可以看看。…

    作者头像 李华
    网站建设 2026/8/31 15:44:08

    电力巡检缺陷检测数据集工程实践:从7z解压到YOLOv8训练部署全记录

    简介&#xff1a;本资源是面向电力系统智能化运维场景的图像目标检测专用数据集&#xff0c;适用于计算机视觉初学者、电气自动化工程师及AI模型开发者&#xff0c;用于训练和验证输电线路、变电站设备等典型电力设施的缺陷识别能力。压缩包共121个文件&#xff0c;含40张JPG与…

    作者头像 李华
    网站建设 2026/8/31 15:43:42

    Matlab Simulink非线性空气悬架建模与仿真全流程解析

    简介&#xff1a;本资源是一套面向车辆动力学建模初学者与进阶学习者的空气悬架Simulink仿真建模实践资料&#xff0c;聚焦非线性系统建模核心难点&#xff0c;适用于整车动力学仿真、主动悬架控制算法验证及高校课程设计等场景。压缩包共10个文件&#xff08;707KB&#xff09…

    作者头像 李华