【算法基础】空间复杂度与递归复杂度详解|面试必考、一次性彻底吃透

发布时间:2026/10/2 18:13:48

【算法基础】空间复杂度与递归复杂度详解|面试必考、一次性彻底吃透 前言上一篇我们彻底讲清楚了时间复杂度。但算法面试、机试评分、代码优劣判断时间复杂度只占一半另一半就是空间复杂度。很多同学刷题只会分析时间一遇到空间、递归栈、递归复杂度直接翻车。本篇作为进阶续篇专门搞定- 空间复杂度怎么算- 什么是「原地算法」- 递归栈空间怎么统计- 递归时间复杂度通用推导方法- 面试高频坑点全覆盖全篇通俗、无废话、可直接背诵面试。一、什么是空间复杂度1.1 定义空间复杂度代码运行过程中额外开辟的存储空间随数据规模 n 的增长趋势。关键点1. 只算额外空间不算题目给的输入空间2. 和时间复杂度一样只看增长趋势舍弃常数、低阶3. 递归栈、数组、集合、临时变量全部计入空间开销1.2 为什么空间复杂度很重要1. 机试有内存限制很多题时间够但超内存MLE2. 面试高频提问是否为原地算法空间能否优化3. 大厂非常看重时间、空间双向最优二、空间复杂度三大等级精讲代码2.1 O(1) 常数空间最优原地算法不随 n 变化只使用固定少量变量常见交换变量、双指针遍历、基础运算def sum_n(n):res 0for i in range(n):res ireturn res仅开辟 res、i 两个变量和 n 无关 空间复杂度 O(1)满足 O(1) 的算法可称为 原地算法2.2 O(n) 线性空间随数据规模 n 开辟同等大小空间典型场景新建数组、List、哈希表def create_arr(n):arr [0] * nreturn arr数组长度随 n 线性增长 空间复杂度 O(n)2.3 O(n²) 平方空间二维数组、矩阵存储dp [[0]*n for _ in range(n)]n行n列总空间 $$n^2$$ 空间复杂度 O(n²)一般出现就属于高内存开销大题目基本会MLE。三、最容易被忽略的空间递归栈空间绝大多数新手失分点递归不创建数组也会占用空间3.1 递归栈规则- 每调用一次递归就会压入一层栈帧- 递归深度 栈空间复杂度案例1普通递归 O(n) 空间def dfs(n):if n 0:returndfs(n-1)递归深度n 层 空间复杂度 O(n)案例2二分递归 O(logn) 空间def binary(n):if n 0:returnbinary(n // 2)每次折半深度 logn 空间复杂度 O(logn)重点总结循环几乎不占额外空间递归一定吃栈空间四、递归时间复杂度通用推导面试核心循环复杂度肉眼可看递归必须公式推导4.1 递推公式法万能模板设 $$T(n)$$ 为 n 规模的时间复杂度1. 写出递推式2. 带入递归树 / 公式展开3. 取最高阶项例题1斐波那契递归def fib(n):if n 2:return 1return fib(n-1) fib(n-2)递推式$$T(n) T(n-1) T(n-2) O(1)$$递归树每层翻倍总节点数指数增长 时间复杂度 O(2ⁿ)例题2二分递归def find(n):if n 1:returnfind(n//2)递推式$$T(n) T(n/2) O(1)$$展开得$$logn$$ 层 时间复杂度 O(logn)例题3归并思想递归每层遍历 n 次一共 logn 层 时间复杂度 O(nlogn)五、面试6大高频坑点必背坑1只看数组不算递归栈很多人递归没数组 O(1)❌ 错递归深度就是空间坑2把输入数组算进空间复杂度题目给的参数、原始输入 不算额外空间坑3分不清原地算法O(1) 额外空间 原地O(logn) / O(n) 非原地坑4递归时间凭感觉猜递归不能肉眼看必须递推式递归树分析坑5忽略常数优化但卡死内存时间可以忽略常数空间常数开销很致命坑6DFS、回溯空间不会分析回溯算法本质递归空间取决于最大递归深度六、常见算法时空复杂度总表面试直接背- 冒泡/选择/插入排序$$O(n^2)$$、$$O(1)$$- 快速排序$$O(nlogn)$$、$$O(logn)$$栈深度- 归并排序$$O(nlogn)$$、$$O(n)$$- 二分查找$$O(logn)$$、$$O(1)$$- 普通遍历$$O(n)$$、$$O(1)$$- 斐波那契暴力递归$$O(2^n)$$、$$O(n)$$七、总结1. 空间复杂度统计额外开辟空间输入不算2. 变量固定不变O(1) 原地算法3. 递归空间看递归深度递归时间看递归树总节点4. 刷题必须双分析时间 空间5. 递归题是复杂度分析的最大难点也是面试拉分点---下期预告算法五大思维误区刷题一直没进步的根源补齐算法入门最后一块短板
延伸阅读

更多相关文章

2026/10/2 18:13:48

HarmonyOS 7 状态手记 01|页面状态别乱放

做 HarmonyOS 7 页面时,最容易把人绕进去的往往不是布局,而是“这个值到底该放哪儿”。页面计数、加载状态与条件渲染 看起来只是几行代码,真接进项目后,经常会遇到 UI 不刷新、返回页面数据变旧、弹窗取消后值却被改掉&#xff0…

2026/10/2 18:13:48

十大 Python 自动化工具与脚本示例

因为它具备强大的功能特性, 且掌握的语法非常简单易懂, 所以在自动化这个行业领域里面, 它有着非常普遍的用途。下面是列举出来的十个用于自动化的工具以及相关的脚本例子, 这些工具和脚本存在的情况下, 可以让大家的工作效率得到大幅度的提升, 与此同时还可以有效地削减掉许多…

2026/10/2 18:08:48

模型优化器实战:剪枝、量化与算子融合的工程化落地

1. 模型优化器到底在优化什么第一次看到“Model-Optimizer”这个词,很多人会下意识觉得它就是一个调参工具,或者是一个自动搜超参的脚本。我刚开始接触的时候也这么想,后来踩了几次坑才明白,模型优化器真正做的事情,是…

2026/10/2 19:23:53

WorkBuddy本地网关:14个免费模型通道自动路由实战

1. 为什么要把十几个免费模型通道塞进一个入口手里攒了一堆免费模型通道的人,大概都经历过这种混乱:写代码的时候想用响应快的,写文案的时候想用文笔好的,做长文档总结的时候又想换一个上下文窗口大的。结果就是浏览器里开着五六个…

2026/10/2 19:23:53

从零手写Agent骨架:LLM工具调用与MCP协议实战入门

1. 为什么我要写这个 AgentSeed 系列 过去大半年,我几乎把市面上能叫得出名字的 Agent 框架都摸了一遍,从最早期用纯 Prompt 拼工具调用,到后来上手各种编排框架,再到自己动手写调度层、写记忆模块、写工具注册中心。踩过的坑多到…

2026/10/2 19:23:53

FastAPI+Vue3构建家教预约平台:从数据模型到并发控制的实战指南

去年帮朋友做了一套基于Python和Vue3的家教预约服务平台,前前后后从需求梳理到上线部署走了两个多月,中间踩了不少坑,也沉淀了一些比较实用的设计经验。这套系统并不是那种纯练手的Demo,而是真正要给学生、家长、家教老师三方一起…

2026/10/2 19:23:53

a2a-alert-agent:Python告警通知封装库的配置与实战指南

最近在搭自动化告警这套东西的时候,我又把那个Python包拎出来用了一遍——a2a-alert-agent。这名字初看有点绕,拆开其实就是agent to alert:给程序配一个“告警通讯员”。脚本跑挂了、指标超阈值了、定时任务静默失败了,它能在第一…

2026/10/2 19:23:53

Redis模糊查询全解析:从KEYS阻塞到SCAN与索引设计实战

如果你在业务代码里写过KEYS user:*,那你大概体会过那种“上线前好好的,一压测 Redis 就报警”的酸爽。Redis 的模糊查询一直是个很矛盾的话题:需求太常见,官方又不推荐用KEYS直接扫。很多人被问到时第一反应是“用 KEYS 不就完了…

2026/10/2 19:18:52

显式状态驱动:为Coding Agent构建可靠Harness执行框架

最近两个月的周末,我基本都泡在一件事上:让 coding agent 在一批真实仓库里稳定地完成“改需求-跑测试-提PR”这个闭环。试了很多方案后,一个在社区里被反复讨论的术语落到了我面前——harness。更确切地说,是 Jev 这个项目背后那…

2026/10/2 8:16:46

东莞市品牌网站建设报价常见报错与解决

东莞品牌网站建设报价单背后:一份保姆级建站教程避坑实录 网站做好了没人访问,这大概是很多老板最头疼的事。花了大几万做的品牌站,上线后流量惨淡,比路边摊还冷清。别急着骂外包公司,很多“东莞品牌网站建设报价”里藏着不少猫腻,比如用模板站冒充定制…

2026/10/2 18:20:53

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/10/1 10:48:55

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/10/2 0:02:57

PWN入门:从栈溢出原理到ROP链实战

1. 这不是“学PWN”,是重新理解你每天敲的每一行C代码我第一次在CTF赛场上写出能控制程序流的exp时,手抖得连gdb的c命令都输错三次。那道题只有23行C代码,一个gets()调用,一个printf(),一个return——它甚至没开NX&…

2026/10/2 0:02:57

Windows下cudaMallocHost显存占用之谜:WDDM与TCC模式差异及优化方案

1. 一个反直觉的显存占用现象第一次在 Windows 上看到cudaMallocHost把显存吃掉的时候,我的反应是打开任务管理器反复确认了三遍。明明调用的是主机端锁页内存分配,按 CUDA 文档的说法,这块内存应该落在系统 RAM 里,跟 GPU 的显存…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑