自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(128)
  • 收藏
  • 关注

原创 【算法笔记】资源限制类题目的解题套路

类似于好多数据的排序问题,可以用大根堆一次排好一段范围内的数据,然后下次循环再排号另一段,比如用大根堆,堆里面放的是两个数值组成的一组数据,一个是具体的数值(类似于key),用来大根堆排序的,另一个是key具体出现的次数,规定堆中有10种数,用一个变量记录最大值,循环时小于最大值的直接丢了(已经排过了),大于最大值的,如果堆里面不够10个数直接进入,到了10个数,如果小于最大值则替换堆顶元素。这样一次循环下来,就能结合上出现的次数,在大根堆中将这10中数据排好序,然后进行下一轮循环,直到把所有数据排好序。

2025-12-19 15:54:55 196

原创 【算法笔记】AC自动机

AC自动机: AC自动机是一种高效的多模式字符串匹配算法,它巧妙地将 Trie树的字典结构与 KMP算法的失配指针思想相结合,能同时在一段文本中查找多个模式串的所有出现位置,广泛应用于敏感词过滤、生物信息学序列分析等领域。在字符串匹配领域,我们会遇到两类问题:单模式匹配:给定一个文本字符串和一个模式字符串,判断模式字符串是否出现在文本字符串中。《【算法笔记】KMP算法》多模式匹配:给定一个文本字符串和多个模式字符串,判断所有模式字符串是否出现在文本字符串中。解决方案:AC自动机算法。

2025-12-19 15:31:04 517

原创 【算法笔记】树状数组IndexTree

IndexTree(树状数组) : IndexTree是一种巧妙的数组结构,主要用于处理数组的单点更新和区间前缀和查询。它在解决动态前缀和问题方面非常优雅,代码简洁,并且在扩展到多维时比线段树更容易实现。IndexTree的数组下标是从1开始的,所以本章讨论的所有下标都是从1开始,如果是处理从0开始的下标,可以在调用IndexTree的方法时,将下标+1转为从1开始即可。

2025-12-19 14:17:50 336

原创 【算法笔记】线段树SegmentTree

线段树:主要是用于高效解决区间查询和更新的问题,它通过分治思想和用空间换取时间的方法,将数组区间进行递归二分,使其构成一颗逻辑上的二叉树,最后使得对区间范围的操作能够在对数时间O(logN)内完成。线段树解决的问题范畴:大范围信息可以只由左、右两侧信息加工出,而不必遍历左右两个子范围的具体状况线段树的操作思想:1)构建线段树的思想:用线段树解决问题的思想本质上就是把原来的数组当做一个二叉树的叶子节点,然后根据范围构建上层的节点,

2025-12-15 09:59:23 482

原创 【算法笔记】二叉树的Morris遍历

  Morris遍历: 二叉树之前的遍历方式有空间浪费的问题(递归实现也会占中栈空间)。Morris遍历时间复杂度O(N),额外空间复杂度O(1),通过利用原树中大量空闲指针的方式,达到节省空间的目的根据Morris遍历的过程,写出的代码模板1)如果cur没有左孩子,cur向右移动(cur = cur.right)2)如果cur有左孩子,找到左子树上最右的节点mostRight:2.1)如果mostRight的右指针指向空,让其指向cur,然后cur向左移动(cur = cur.left)2.2)如果mos

2025-12-11 16:00:59 889

原创 【算法笔记】蓄水池算法

蓄水池算法:解决的问题:从N个元素中随机选择m个元素,每个元素被选中的概率相等概率计算详解概率计算的核心在于,对于数据流中第 i 个元素,证明它最终留在蓄水池的概率是 m/N(N为数据流总长度)。证明时需区分两种情况。1)对于前m个元素(i ≤ m)这些元素一开始就被放入蓄水池。它们最终被保留下来,需要在后续所有替换操作中都不被换出。从第 m+1个元素开始,到第 N个元素,每个元素 j都可能带来替换。对于第 j个元素(j > m),它不会替换掉我们关注的第 i 个元素的概率是多少。

2025-12-10 16:35:26 363

原创 【算法笔记】bfprt算法

bfprt算法的核心思想bfprt算法也常被称为中位数的中位数算法。它的核心目标是选择一个高质量的“主元”(pivot),使得在后续的划分(Partition)过程中,数组能够被相对均匀地分成两部分。这与快速选择算法思想类似,但bfprt通过一种确定性的方法来选择主元,避免了因主元选择不当而导致性能退化为O(n²)的最坏情况。简单来说,bfprt算法通过分组寻找中位数的中位数来确定主元,从而确保每次划分至少能淘汰一定比例的元素,使得问题规模以几何级数减少,最终保证线性时间复杂度。

2025-12-10 16:31:21 497

原创 【算法笔记】Manacher算法

Manacher算法: 求解字符串的最长回文子串的长度。

2025-12-05 14:06:36 781

原创 【算法笔记】KMP算法

KMP算法是一种非常高效且经典的字符串匹配算法,它通过巧妙的预处理机制,显著提升了在主文本串中查找模式串(被包含的字符串)的效率。个人学习总结笔记,不能保证非常详细,轻喷。

2025-12-02 12:02:06 864

原创 【算法笔记】斐波那契数列的矩阵快速幂模型

总结成类似斐波那契数列的方法思路:1)n=1,有单个1这种打标,12)n=2,有11,10两种打标,23)n=3,有111,110,101两种打标,34)n=4,有1111,1110,1101,1011,1010五种打标,5依次类推,到第n年的数量可以总结为:F(n) = F(n-1) + F(n-2)下面实现的是非递归实现的方法,递归实现的非常简单,就不写了/*** 总结成类似斐波那契数列的方法* 思路:* 1)n=1,有单个1这种打标,1。

2025-11-28 17:06:21 869

原创 【算法笔记】单调栈

2.1.2 没有重复值的数组单调栈的应用方法没有重复值的数组单调栈的应用方法。思路:对于没有重复值的数组来说,应用单调栈的方法能很快找出其左右两侧最近的最小值。我们准备一个单调递增的栈,依次将元素加入到栈中,在加入一个元素的时候,如果栈顶元素大于当前的元素,就将其出栈,此时右侧的最小值就是让它出栈的值,左侧的最小值就是此时栈中的栈顶元素。如果此时栈中已经没有元素了,说明没有左侧的最小值。当所有元素都循环一遍以后,栈中还有值,要将栈中的值依次出栈,此时右侧没有最小值,左侧最小值依然是当前值出栈

2025-11-27 16:11:46 614

原创 【算法笔记】窗口内最大值或最小值的更新结构

个人学习总结笔记,不能保证非常详细,轻喷。

2025-11-24 11:08:42 757

原创 【算法笔记】从暴力递归到动态规划(三)

【算法笔记】从暴力递归到动态规划(一)【算法笔记】从暴力递归到动态规划(二)【算法笔记】从暴力递归到动态规划(三)2.14.2、从暴力递归尝试改成动态规划从暴力递归改到动态规划思路:1、根据递归函数参数,有row,col和rest三个变量,所以缓存表为dp[N][M][k+1]2、根据base case,rest为0的时候,不管什么位置,都是1,所以三维数组的最底层都是13、根据依赖关系,上面的层数依赖下面的层,所以从下往上填三维数组4、根据调用关系,返回dp[row][col][k]

2025-11-19 15:33:28 839

原创 【算法笔记】从暴力递归到动态规划(二)

【算法笔记】从暴力递归到动态规划(一)【算法笔记】从暴力递归到动态规划(二)【算法笔记】从暴力递归到动态规划(三)2.7.2、基于范围尝试模型的动态规划基于范围尝试模型的动态规划:思路:根据暴力递归改成动态规划:1)根据递归函数f(str,L,R)的含义,有L和R两个变量,范围是0…N-1,我们可以定义一个二维数组dp[N][N],其中dp[L][R]表示str[L…R]最长回文子序列长度返回2)根据递归函数f(str,L,R)的base case,我们可以初始化dp数组的对角线和对角线

2025-11-19 15:12:33 1118

原创 【算法笔记】从暴力递归到动态规划(一)

【算法笔记】从暴力递归到动态规划(一)【算法笔记】从暴力递归到动态规划(二)【算法笔记】从暴力递归到动态规划(三)2.1.2、从暴力递归改到利用缓存优化的递归从暴力递归改到利用缓存优化的递归能够改为利用缓存优化的递归的条件是在递归的过程中,出现了重复求解的情况,重复解的出现是因为递归的过程中,有很多子问题是重复计算的,所以可以用缓存优化。本题目中,递归函数中的cur和rest两个变量不断的变化,在不同的分支中会出现cur和rest相同的情况,也就是出现了重复求解,所以可以利用缓存来优化。思

2025-11-19 14:09:44 690

原创 【算法笔记】暴力递归尝试

递归思想非常重要,计算机编程中很多算法都是要用到递归完成,同时递归也是解决很多问题的思路,比如动态规划,就是在递归的基础上,缓存结果,达到阶梯的目的。本文总结了一下递归尝试的常用题目和思路,方便深入的理解递归。

2025-10-21 11:22:26 812

原创 【算法笔记】图

  本文总结了图相关的算法。1.2、Edge类1.3、Graph类1.4、特殊结构转成Graph示例将特殊二维矩阵转为自定义的图的方法:示例:matrix 所有的边的集合,是一个N*3 的矩阵,里面的数据格式为:[weight, from节点上面的值,to节点上面的值]如[ 5 , 0 , 7],[ 3 , 0, 1]2、图的遍历(搜索)2.1、宽度优先遍历(BFS)宽度优先遍历(Breadth-First Search):也叫广度优先遍历,层层推进,先访问离起点最近的节点

2025-10-18 13:42:56 731

原创 【算法笔记】并查集

并查集(Union-Find)是一种非常高效的数据结构,专门用于处理一些不相交集合的合并与查询问题。实现中我贴了整体代码,是为了方便复制到IDE中使用。并查集的实现方式一:使用Map来实现1.2、数组实现并查集并查集的实现方式二:使用数组来实现思路:1)用数组实现并查集,本质就是用数组的下标和下标对应的数字来实现节点和其父节点的对应关系,数组的下标就是节点,数组的数字就是节点的父节点。2)可以另一个数组来存储一个元素的集合大小,在这个集合中,数组的下标就是代表的节点,数组的数字就是集合的大小。

2025-10-11 15:05:01 434

原创 【算法笔记】贪心算法

1)最自然智慧的算法2)用一种局部最功利的标准,总是做出在当前看来是最好的选择3)难点在于证明局部最功利的标准可以得到全局最优解4)对于贪心算法的学习主要以增加阅历和经验为主。

2025-09-30 10:54:56 996

原创 【算法笔记】二叉树递归解题套路及其应用

二叉树的递归套路,是指利用递归解决二叉树类问题时的思路,其本质就是用递归的方式,向左右子树要信息,然后总结出整体的答案。本文整理了递归套路的解题思路和相关的应用题目。

2025-09-28 14:50:37 958

原创 【算法笔记】二叉树的遍历、序列化和相关题目

   二叉树的知识点很多,本文主要写普通二叉树的遍历和序列化问题,还有一些比较常见的二叉树题目。  二叉树的遍历是指将二叉树用特定的规则依次访问每个节点。常见的是先序、中序和后续遍历三种方式。  递归遍历二叉树模板:  二叉树的递归序:二叉树递归遍历模板如下:1.1、先序遍历1.2、中序遍历1.3、后序遍历整体代码和测试如下:2、二叉树先序、中序、后续遍历的非递归实现   在某些数据量比较大的场景中,如果用递归实现,栈空间就有可能耗尽,所以有时需要非递归方式来遍历二叉树,下面介绍二叉树的非

2025-09-24 13:48:44 995

原创 【算法笔记】链表相关的题目

单向链表是非常考验编码水平的一类题目,很多时候感觉很简单的算法,在指针上一不注意,就会出现各种意想不到的问题,所以对于这类题目,要思路清晰,定义好变量和之间的关系。今天梳理几个链表相关的题目。

2025-09-21 15:00:51 798

原创 【算法笔记】计数排序、基数排序、希尔排序

后记个人学习总结笔记,不能保证非常详细,轻喷。

2025-09-18 11:37:42 1077

原创 【算法笔记】前缀树

个人学习总结笔记,不能保证非常详细,轻喷。

2025-09-18 11:29:51 246

原创 【算法笔记】加强堆

个人学习总结笔记,不能保证非常详细,轻喷。测试非基础类型的加强堆。

2025-09-16 11:43:38 954

原创 【算法笔记】堆和堆排序

整个数组的建堆方式不是一个一个数据加入,而是依次把一个数组都给你,将其调整成大根堆或者小根堆,其有两种方式:自上而下和自下而上,常用的是自下而上,因为其时间复杂度更好。个人学习总结笔记,不能保证非常详细,轻喷。大根堆实现排序(常用的堆排序方式)示例一:整数的升序比较器写法。示例二:整数的降序比较器写法。堆排序:利用堆结构实现排序。移动距离不超过k的排序。

2025-09-14 14:20:18 706

原创 【算法笔记】快速排序算法

快速排序。

2025-09-13 11:37:00 840

原创 【算法笔记】归并排序

个人学习总结笔记,不能保证非常详细,轻喷。递归排序的非递归实现方式。递归排序的递归实现方式。

2025-09-10 10:31:46 1092

原创 【算法笔记】链表、站和队列、递归性质

链表的本质是将内存中不连续的数据串起来,突破了数组有长度限制的问题。链表分为了单链表和双链表。数组有长度的限制,可以用数组实现有限制长度的栈和队列。实现一个特殊的栈,在基本功能的基础上,再实现查看栈中最小元素的功能。个人学习总结笔记,不能保证非常详细,轻喷。用两个栈结构实现队列结构。

2025-09-08 11:18:27 631

原创 【算法笔记】异或运算

异或运算,指的是二进制的位运算。

2025-09-05 10:02:08 976

原创 【算法笔记】选择排序、插入排序、冒泡排序、二分查找问题

算法的笔记,直接上代码,思路和问题这些,都在代码注释上面。

2025-09-03 15:27:03 295

原创 《底层逻辑——看清这个世界的底牌》读书笔记5--第五章

如果组织和组织之间的沟通协作,就要用普遍法则,找到彼此的共同点,而不是挑战彼此的立场和信仰。事业共同体:宁愿牺牲短期的利益,来获取可能有风险的长期的、更大的回报,形成了事业共同体。依靠文化,依靠选拔最优秀的人,依靠给员工充分的自由和安全感,来激发员工最大的创造力。我们可以有各自的想法和观点,也一定有彼此都认同的东西,比如尊重生命,比如契约精神。“巨婴”和“杠精”的存在,是因为在和世界打交道的过程中,选择了错误的法则。一种叫狡诈,或者叫智慧。第二种:员工期待高,企业期待高,事业驱动,企业需要有更高的领导力。

2025-08-14 18:18:55 783

原创 《底层逻辑——看清这个世界的底牌》读书笔记4--第四章

就是我通过创造一个失败者,让你感觉自己就是成功者,从而产生心满意足的优越感。边界感的本质,是对所有权的认知,如果要跨越边界,就需要先征求对方的同意。多巴胺是人在确认动机后,支撑他不断攀登、享受过程、完成目标的化学物质。没有Why,就没有动力,What和How也就没有了意义;内啡肽是刺激我们的大脑,让我们觉得很开心的化学物质。一种是通过目的性很强的多巴胺,去找事情做,比如完成艰难的工作。认知科学就像神农尝百草,不断测试,摸索经验,最终总结出结论。鸡同鸭讲,只因混淆了What、Why、How。

2025-08-12 19:07:02 829

原创 《底层逻辑——看清这个世界的底牌》读书笔记3--第三章

想要获得能力,就要勤奋,不仅要勤奋,还要可怕的勤奋,高效和可怕的勤奋。变革时代的行业选择:大部分人要避开指数级增长的行业,服务业是一个边际交付时间很大的行业,在变革时代中是个不错的选择。“骰盅魔咒”:符合正态分布的商业模式,大部分人都差不多,少部分人做的特别好或者特别差。态度就是你选择用来看世界的那幅有色眼镜,态度没有人可以教你,只能自己用“心”去选择。看淡:他们怎么评价,是他们的事情,我对我自己的看法,只和我自己认同的价值观有关。知识是被发现和证明的规律,学习知识的方法就是记忆,学习知识要用“脑”

2025-08-12 19:06:40 695

原创 《底层逻辑——看清这个世界的底牌》读书笔记2--第二章

存在的问题:对新事物总抱有怀疑、排斥心理,旧时代的结构一旦发生变化,他的闭环可能会出现漏洞,他不愿承认漏洞,希冀用过往认知体系来填补这个漏洞。一件事情成功的概率为20%,重复做14次,成功的概率能达到95%,要达到99%,需要重复做21次,不管做多少次,无法达到100%概率思维就是要你心平气和的承认,就算你做对了所有的事情,你成功的概率也不高,比如今天的互联网行业,成功的概率也只有5%;三生三世的财富自由:你的钱放的足够长,就可以实现财富自由,但是这个时间的长度,可能要好几代人,也就是三生三世。

2025-08-12 19:06:17 970

原创 Centos7离线方式升级内核

由于最新的阿里云的elrepo源已经没有了最新的包,所以yum升级内核比较麻烦,采用离线安装的方式升级。

2025-06-19 09:54:43 715 1

原创 docker安装mysql 5.7

运行完成以后,可以用以下命令来查看。

2025-01-16 18:34:24 416

原创 《底层逻辑——看清这个世界的底牌》读书笔记1--第一章

道德,是为了群体的繁衍,最后促进个体的生存、繁衍,大家共同达成“社会契约”。道德,往往是反人性的。罗曼·罗兰:“这个世界上,只有一种真正的英雄主义,那就是认清了生活的真相后还依然热爱它。菲兹杰拉德:“同时持有全然相反的两种观念,还能正常行事,是第一流智慧的标志。一件事情出现不好的结果时,责怪、埋怨、后悔都是无用的,它们改变不了结果。在人生中,博弈是第三层智慧,定力是第二层智慧,选择是第一层智慧。如何博弈,如何保持定力,如何做出选择,都决定着人生的走向。法律,是道德的子集,是维护群体存在的道德底线。

2024-08-29 22:27:21 1640 2

原创 《终身学习——10个你必须掌握的未来生存法则》读书笔记

无论你遵守与否,大自然的法则是无法改变的,你若无视“重力法则”,从屋顶跳下,那给你善后的就不是“重力警察”了。同理,如果你不遵循成长法则,也不会有“成长警察”找你麻烦,你只会发现自己的成长不再那么顺利了而已。承诺:能使你下决心投入这个大事物、大事件之中,因为你看到了其他人、其他事物所做的贡献的价值。或将它们当做接口,或将它们当做学习的原材料,或者驱动自己去吸取其中的经验教训。谦逊:能使你将自己视为周围世界里独特的一份子,但不是最重要的那个。你无法控制他人的赞誉,但你能把握自己的表现。

2024-08-23 19:35:09 1017

原创 使用markdown绘制简单的思维导图

在CSDN等平台中可使用Mermaid来绘制思维导图。那么先简单介绍下Mermaid。Mermaid是一个用于画思维导图、流程图、状态图、时序图、甘特图等图的工具,使用 JavaScript 进行本地渲染。虽然Mermaid暂不支持思维导图的绘制,但是可通过绘制流程图来替代简单的思维导图。

2024-08-19 17:59:29 6471

nginx高级配置笔记

nginx高级配置笔记

2024-01-18

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除