算法面试小抄
第一章:算法与数据结构要点速学
1.时间复杂度 (大 O)


首先,我们来谈谈常用操作的时间复杂度,按数据结构/算法划分。然后,我们将讨论给定输入大小的合理复杂性。
数组(动态数组/列表)
规定 n = arr.length,
注意: 𝑂(1)O(1) 操作相对于
n是常数.实际上,哈希算法可能代价很高。例如,如果你的键是字符串,那么它将花费 𝑂(𝑚)O(m),其中 𝑚m 是字符串的长度。 这些操作只需要相对于哈希映射大小的常数时间。
上面的说明也适用于这里。
-
在结尾添加或删除元素: 𝑂(1)O(1) 相关讨论
-
从任意索引中添加或删除元素: 𝑂(𝑛)O(n)
-
访问或修改任意索引处的元素: 𝑂(1)O(1)
-
检查元素是否存在: 𝑂(𝑛)O(n)
-
双指针: 𝑂(𝑛⋅𝑘)O(n⋅k), 𝑘k 是每次迭代所做的工作,包括滑动窗口
-
构建前缀和: 𝑂(𝑛)O(n)
-
求给定前缀和的子数组的和:𝑂(1)O(1)
字符串 (不可变)
规定
n = s.length, - 添加或删除字符: 𝑂(𝑛)O(n)
- 任意索引处的访问元素: 𝑂(1)O(1)
- 两个字符串之间的连接: 𝑂(𝑛+𝑚)O(n+m), 𝑚m 是另一个字符串的长度
- 创建子字符串: 𝑂(𝑚)O(m), 𝑚m 是子字符串的长度
- 双指针: 𝑂(𝑛⋅𝑘)O(n⋅k), 𝑘k 是每次迭代所做的工作,包括滑动窗口
- 通过连接数组、stringbuilder 等构建字符串:𝑂(𝑛)O(n)
链表
给定 𝑛n 作为链表中的节点数,
- 给定指针位置的后面添加或删除元素: 𝑂(1)O(1)
- 如果是双向链表,给定指针位置添加或删除元素: 𝑂(1)O(1)
- 在没有指针的任意位置添加或删除元素: 𝑂(𝑛)O(n)
- 无指针任意位置的访问元素: 𝑂(𝑛)O(n)
- 检查元素是否存在: 𝑂(𝑛)O(n)
- 在位置
i和j之间反转: 𝑂(𝑗−𝑖)O(j−i) - 使用快慢指针或哈希映射完成一次遍历: 𝑂(𝑛)O(n)
哈希表/字典
给定
n = dic.length, - 添加或删除键值对: 𝑂(1)O(1)
- 检查 key 是否存在: 𝑂(1)O(1)
- 检查值是否存在: 𝑂(𝑛)O(n)
- 访问或修改与 key 相关的值: 𝑂(1)O(1)
- 遍历所有键值: 𝑂(𝑛)O(n)
集合
给定
n = set.length, - 添加或删除元素: 𝑂(1)O(1)
- 检测元素是否存在: 𝑂(1)O(1)
栈
栈操作依赖于它们的实现。栈只需要支持弹出和推入。如果使用动态数组实现:
给定 n = stack.length,
注意:大多数编程语言实现队列的方式比简单的双链表更复杂。根据实现的不同,通过索引访问元素可能比 𝑂(𝑛)O(n) 快,但有一个重要的常量除数。
- 推入元素: 𝑂(1)O(1)
- 弹出元素: 𝑂(1)O(1)
- 查看 (查看栈顶元素): 𝑂(1)O(1)
- 访问或修改任意索引处的元素: 𝑂(1)O(1)
- 检测元素是否存在: 𝑂(𝑛)O(n)
队列
队列操作依赖于它们的实现。队列只需要支持出队列和入队列。如果使用双链表实现:
给定
n = queue.length, - 入队的元素: 𝑂(1)O(1)
- 出队的元素: 𝑂(1)O(1)
- 查看 (查看队列前面的元素): 𝑂(1)O(1)
- 访问或修改任意索引处的元素: 𝑂(𝑛)O(n)
- 检查元素是否存在: 𝑂(𝑛)O(n)
二叉树问题 (DFS/BFS)
给定 𝑛n 作为树的节点数,
大多数算法的时间复杂度为 𝑂(𝑛⋅𝑘)O(n⋅k),𝑘k 是在每个节点上做的操作数, 通常是 𝑂(1)O(1)。这只是一个普遍规律,并非总是如此。我们在这里假设 BFS 是用高效队列实现的。
二叉搜索树
给定 𝑛n 作为树中的节点数,
- 添加或删除元素:最坏的情况下 𝑂(𝑛)O(n),平均情况 𝑂(log𝑛)O(logn)
- 检查元素是否存在:最坏的情况下 𝑂(𝑛)O(n),平均情况 𝑂(log𝑛)O(logn)
平均情况是当树很平衡时 —— 每个深度都接近满。最坏的情况是树只是一条直线。
堆/优先队列
给定 n = heap.length 并讨论最小堆,
- 添加一个元素: 𝑂(log𝑛)O(logn)
- 删除最小的元素: 𝑂(log𝑛)O(logn)
- 找到最小的元素: 𝑂(1)O(1)
- 查看元素是否存在: 𝑂(𝑛)O(n)
二分查找
在最坏的情况下,二分查找的时间复杂度为 𝑂(log𝑛)O(logn),其中 𝑛n 是初始搜索空间的大小。
其他
- 排序: 𝑂(𝑛⋅log𝑛)O(n⋅logn), 其中 𝑛n 是要排序的数据的大小
- 图上的 DFS 和 BFS:𝑂(𝑛⋅𝑘+𝑒)O(n⋅k+e),其中 𝑛n 是节点数,𝑒e 是边数,前提是每个节点处理花费都是 𝑂(1)O(1),不需要重复遍历。
- DFS 和 BFS 空间复杂度:通常为 𝑂(𝑛)O(n),但如果它在图形中,则可能为 𝑂(𝑛+𝑒)O(n+e) 来存储图形
- 动态规划时间复杂度:𝑂(𝑛⋅𝑘)O(n⋅k),其中 𝑛n 是状态数,𝑘k 是每个状态所需要的操作数
- 动态规划空间复杂度:𝑂(𝑛)O(n),其中𝑛n是状态数
2.输入大小与时间复杂度
3.排序算法

4. 通用 DS/A 流程图

第二章:算法题代码模板
第二章:算法面试详解
相关文章:
算法面试小抄
第一章:算法与数据结构要点速学 1.时间复杂度 (大 O) 首先,我们来谈谈常用操作的时间复杂度,按数据结构/算法划分。然后,我们将讨论给定输入大小的合理复杂性。 数组(动态数组/列表) 规定 n arr.length, 注意: &am…...
当有违法数据时,浏览器不解析,返回了undefined,导致数据不解析
现象:页面上没有看到数据 排查:断点到线上的源码里:1、协议回调确实没有拿到数据是个undefined 2、network里看服务确实响应了数据 3、控制台没有任何报错。 心情:莫名其妙的现象 我本地有json格式化工具,copy进去后&…...
在MySQL中ORDER BY使用的那种排序算法
在 MySQL 中,ORDER BY 子句的排序算法通常根据场景、数据量和表的索引情况而有所不同。MySQL 常用的排序算法包括: 文件排序(File Sort):MySQL 没有使用索引排序的情况下,会进行文件排序,这可以…...
学习threejs,使用粒子实现雨滴特效
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.Points简介1.11 ☘️…...
分布式-单元化架构1
一 两地三中心 1.1 两地三中心* 两地指的是两个城市:同城,异地。三中心指的是三个数据中心:生产中心、同城容灾中心、异地容灾中心。 在同一个城市或者临近的城市建设两个相同的系统,双中心具备相当的业务处理能力,…...
C++模板、STL
目录 一、模板 1、函数模板 (1)、基本语法和使用 (2)、函数模板注意事项 (3)、普通函数与函数模板的区别 (4)、普通函数与函数模板的调用规则 (5)、模板的局限性 2、类模板 (1)、基本语法 (2)、类模板与函数模板区别 (3)、类模板中成员函数创建时机 (4)、类模板对象…...
计算机视觉中的点算子:从零开始构建
Hey小伙伴们!今天我们要聊的是一个非常基础但极其重要的计算机视觉技术——点算子(Point Operators)。点算子主要用于对图像的每个像素进行独立的处理,比如亮度调整、对比度增强、灰度化等。通过这些简单的操作,我们可…...
国际中文教育知识图谱问答
你还在为毕业设计头疼么?想快速搭建一个智能化系统,展示数据又能精准回答问题?那你绝对不能错过这个超实用的 知识图谱问答系统,特别适用于需要整合复杂数据关系、交互性强的项目! 这个系统基于 Neo4j图数据库 开发&a…...
酒店大板轻触开关与传统的开关有什么区别
酒店大板轻触开关与传统的开关在功能、设计、使用方式以及安装维护等多个方面都存在显著的差异。以下是对这些差异的详细分析: 功能差异 酒店大板轻触开关: 多功能性:酒店大板轻触开关通常集成了多种功能,如控制照明、窗帘、夜灯、…...
【蓝桥杯选拔赛真题78】python电话号码 第十五届青少年组蓝桥杯python选拔赛真题 算法思维真题解析
目录 python电话号码 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 七、 推荐资料 1、蓝桥杯比赛 2、考级资料 3、其它资料 python电话号码 第十五届蓝桥杯青少年组python比赛选拔赛真题 一、题目要…...
对比两个json串的diff,支持map的深度递归
背景 项目重构,对老接口进行技术改造。动代码后,难免会有些bug,我们需要对比改造前后接口的返回,来判断逻辑是否有问题,这就涉及两个json的对比。 常规的diff文本工具是按行对比,无法处理复杂的map。本文通…...
【我的创作纪念日1024】
我的创作纪念日1024 机缘成就明年的规划 机缘 过去的1024个日子里,我在专业发展、职场和发展、科技创新创业、软件开发、人工智能、虚拟现实、区块链等栏目分享了一些工作和学习的建议和体会。尤其是在2022年,我连续发布100篇的博文,不仅仅是…...
萤石设备视频接入平台EasyCVR私有化视频平台变电站如何实现远程集中监控?
一、方案背景 随着城市经济的发展和电力系统的改造,变电站的数量和规模逐渐增加,对变电站的安全管理和监控需求也越来越高。视频监控系统作为重要的安全管理手段,在变电站中起到了关键的作用。 目前青犀视频研发的萤石设备视频接入平台EasyC…...
什么是多线程?请描述 Java 中实现多线程的基本方式?
今天和大家探讨一下 Java 中的多线程,包括它的基本概念、实现方式以及一些实际开发中的注意事项。 什么是多线程? 多线程是指在一个程序中存在多个执行流,每个执行流都可以独立于其他执行流执行。 在 Java 中,多线程允许开发者…...
Dynamic Sparse No Training: Training-Free Fine-tuning for Sparse LLMs
大语言模型(LLM)在设备上部署道路上落下了一个令人生畏的障碍。本文关注于大语言模型的剪枝算法。 动态稀疏训练(Dynamic Sparse Training,DST)是一种近期收到广泛关注的剪枝算法。与之前大部分剪枝方法需要训练整个网…...
解决n+1查询数据库问题
文章目录 1. 问题描述2. 解决方法3. 总结 1. 问题描述 在写项目中,可能会碰到一个问题:通过查询表A得到一个list结果,再对list中的n个元素各查询一次关联的表B。形成对数据库执行n1次查询。这种代码会无形增加数据库的处理负担,影…...
DICOM 基础知识:深入理解DICOM数据结构与标签说明
目录 DICOM 图像概念 DICOM 图像关键特性: DICOM 文件结构 常见数据元素: 数据元素示例详解 DICOM-VR 数据类型说明 DICOM 标准支持的数据集 结语 DICOM 图像概念 DICOM(Digital Imaging and Communications in Medicine&…...
Git - 如何删除 push 过一次的文件链路追踪?
(以 target 文件夹为例)如果你已经在 .gitignore 中添加了 target/ 目录,但 target 文件夹仍然出现在 Git 的变更列表中,可能是因为它之前已经被添加到 Git 仓库中。即使你更新了 .gitignore,Git 仍然会跟踪这些文件。…...
软件测试学习总结
一.软件测试概念和目的 软件测试的概念: 测试模型(V模型) 软件测试就是在软件投入运行前,对软件需求分析、设计规格说明和编码实现的最终审查,它是软件质量保证的关键步骤。 通常对软件测试的定义有两种描述: 定义1:软件测试是为了发现错误而执行程序的过程 定义2:…...
c语言错题——#define对应的查找替换
文章目录 一、题目 提示:以下是本篇文章正文内容,下面案例可供参考 一、题目 分析 结构体向最长的char对齐,前两个位段元素一共42位,不足8位,合起来占1字节,最后一个单独1字节,一共3字节。另外…...
从.bib到.bbl:手把手教你搞定LaTeX参考文献的完整流程
从.bib到.bbl:手把手教你搞定LaTeX参考文献的完整流程 如果你曾被LaTeX的参考文献格式折磨得焦头烂额,这篇文章就是为你准备的。我们将从零开始,完整走一遍从文献管理到最终PDF生成的每个步骤,特别关注那些让新手困惑的.bib、.bbl…...
打造手游PC级操控:QtScrcpy键鼠映射完全指南
打造手游PC级操控:QtScrcpy键鼠映射完全指南 【免费下载链接】QtScrcpy Android实时投屏软件,此应用程序提供USB(或通过TCP/IP)连接的Android设备的显示和控制。它不需要任何root访问权限 项目地址: https://gitcode.com/barry-ran/QtScrcpy 手机…...
OFA模型微调实战:适配特定领域的小样本学习
OFA模型微调实战:适配特定领域的小样本学习 用最少的数据,让通用大模型听懂你的专业语言 1. 引言:当通用模型遇到专业领域 你有没有遇到过这样的情况:一个在通用场景下表现优秀的AI模型,一到你的专业领域就"水土…...
Dify 文本语意识别与智能补全实战指南
1. 认识Dify平台与文本语意识别 第一次接触Dify时,我就被它的"零代码"特性惊艳到了。这个平台把复杂的AI能力封装成了像搭积木一样简单的模块,特别是它的文本语意识别功能,能准确理解用户输入的半句话甚至几个关键词。比如用户输入…...
FOC算法避坑指南:克拉克变换的‘等幅值’与‘等功率’到底怎么选?基于STM32的实测对比
FOC算法避坑指南:克拉克变换的‘等幅值’与‘等功率’到底怎么选?基于STM32的实测对比 在STM32平台上实现磁场定向控制(FOC)时,克拉克变换系数的选择往往让工程师陷入两难:究竟该用2/3(等幅值&…...
从AHB到AXI:手把手带你用Verilog仿真看Outstanding如何提升SoC数据吞吐
从AHB到AXI:深入解析Outstanding机制如何优化SoC数据吞吐效率 在复杂的SoC设计中,总线架构的选择直接影响系统性能。传统AHB总线虽然结构简单,但在高并发场景下容易成为瓶颈。AXI协议通过引入Outstanding、Out-of-order等机制,显著…...
数字图书馆下载工具:高效获取策略与跨平台使用方案
数字图书馆下载工具:高效获取策略与跨平台使用方案 【免费下载链接】internet_archive_downloader A chrome/firefox extension that download books from Internet Archive(archive.org) and HathiTrust Digital Library (hathitrust.org) 项目地址: https://git…...
RTX 4090D专属镜像应用场景:短视频MCN机构批量生成口播视频生产系统
RTX 4090D专属镜像应用场景:短视频MCN机构批量生成口播视频生产系统 1. 短视频行业的痛点与解决方案 短视频MCN机构每天面临的最大挑战之一,就是如何高效生产大量高质量的口播视频内容。传统制作流程通常需要: 租用专业摄影棚聘请主播录制…...
Pikachu靶场实战:SQL注入漏洞深度解析与防御指南
1. SQL注入漏洞初探:从Pikachu靶场开始 第一次接触SQL注入时,我完全被这种"通过输入框就能控制数据库"的神奇攻击方式震惊了。在Pikachu靶场这个专为Web安全学习设计的实验环境中,我们可以安全地体验各种SQL注入攻击手法。不同于真…...
快速上手Qwen3-TTS:无需代码,Web界面直接合成10种语言语音
快速上手Qwen3-TTS:无需代码,Web界面直接合成10种语言语音 1. 为什么选择Qwen3-TTS语音合成 语音合成技术正在改变我们与数字世界的交互方式。想象一下,你正在制作一个多语言教学视频,或者开发一个国际化的智能客服系统…...

