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

算法面试小抄

第一章:算法与数据结构要点速学

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字节。另外…...

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...

生成 Git SSH 证书

🔑 1. ​​生成 SSH 密钥对​​ 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​: -t rsa&#x…...

Spring是如何解决Bean的循环依赖:三级缓存机制

1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间‌互相持有对方引用‌,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

Java数值运算常见陷阱与规避方法

整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...

系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型

本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文通过代码驱动的方式,系统讲解PyTorch核心概念和实战技巧,涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...

9-Oracle 23 ai Vector Search 特性 知识准备

很多小伙伴是不是参加了 免费认证课程(限时至2025/5/15) Oracle AI Vector Search 1Z0-184-25考试,都顺利拿到certified了没。 各行各业的AI 大模型的到来,传统的数据库中的SQL还能不能打,结构化和非结构的话数据如何和…...