自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(18)
  • 资源 (1)
  • 收藏
  • 关注

原创 算法通关村—轻松搞定树的最大深度问题

leetcode104:给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。例如上面的例子返回结果为最大深度为3。给定二叉树 [3,9,20,null,null,15,7],如下图。

2023-08-08 10:17:30 75

原创 算法通关村—轻松搞定二叉树的双指针

合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。因为我们要通过递归函数的返回值来判断两个子树的内侧节点和外侧节点是否相等,所以准确的来说是一个树的遍历顺序是左右中,一 个树的遍历顺序是右左中。单层递归的逻辑就是处理左右节点都不为空,且数值相同的情况。这个貌似就是两个二叉树同时进行前序遍历,先判断根节点是否相同, 如果相同再分别判断左右子节点是否相同,判断的过程中只要有一个不相同就返回 false,如果全部相同才会返回true。

2023-08-04 14:17:46 71 1

原创 算法通关村—迭代实现二叉树的遍历

再看中序遍历,中序遍历是左中右,先访问的是二叉树左子树的节点,然后一层一层向下访问,直到到达树左面的最底部,再开始处理节点(也就是在把节点的数值放进res列表中)。如果前驱节点的右子节点为当前节点,将它的右子节点重新设为空。当前节点更新为当前节点的右子节点。如果前驱节点的右子节点为空,将前驱节点的右子节点设置为当前节点,当前节点更新为当前节点的左子节点。如果当前节点的左子节点不为空,在当前节点的左子树中找到当前节点在中序遍历下的前驱节点;如果当前节点的左子节点为空,则遍历当前节点的右子节点;

2023-08-03 15:23:31 74

原创 算法通关村—原来如此简单

我们依然可以沿用第 102 题的思想,为了满足题目要求的返回值为「先从左往右,再从右往左」交替输出的锯齿形,可以利用「双端队列」的数据结构来维护当前层节点值输出的顺序。双端队列是一个可以在队列任意一端插入元素的队列。为了降低在结果列表的头部添加一层节点值的列表的时间复杂度,结果列表可以使用链表的结构,在链表头部添加一层节点值的列表的时间复杂度是 O(1)。LeetCode 199题目要求是:给定一个二叉树的根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。

2023-08-03 11:10:11 77

原创 理解栈手写栈

一般而言,把允许操作的一端称为栈顶(Top),不可操作的一端称为栈底(Bottom),同时把插入元素的操作称为入栈(Push),删除元素。采用顺序表实现的的栈,内部以数组为基础,实现对元素的存取操作。栈底层实现仍然是链表或者顺序表,栈与线性表的最大区别是数据的存取的操作被限制了,其插入和删除操作只允许在线性表的一端进。栈和队列是比较特殊的线性表,又称之为访问受限的线性表。栈是很多表达式、符号等运算的基础,也是递归的底层实现。top指向的是栈顶元素,新元素入栈时先top++,然后再将元素入栈。

2023-07-30 17:19:00 25 1

原创 算法通关村—如何使用中序和后序来恢复一颗二叉树

是参照中序的两个数组划分的。我们看到后序中2之前的元素都在中序第一个数组中,10之后的所有元素就在第二个数组中,所以我们从2和10之间划分。此时中序[10] 9 [11 15 13 14 12] 后序 [10 15 14 13 12 11] 9,结构如下。去掉空的结点,同理,对于序列[ 10 9 11 15 13 14 12],我们也可以逐步划分。上面后序序列第一个括号里的都是左子树的元素,第二个括号一定都是右子树的元素。中序:3 4 8 6 7 5 2 后序:8 7 6 5 4 3 2。

2023-07-30 17:13:54 29 1

原创 算法通关村第五关-LRU和LFU的设计与实现

上述各项操作中,访问哈希表的时间复杂度为 O(1),在双向链表的头部添加节点、在双向链表的尾部删除节点的复杂度也为 O(1)。我们在代码实现中还需要维护一个minFreq的变量,用来记录LFU缓存中频率最小的元素,在缓存满的时候,可以快速定位到最小频繁的链表,以达到 O(1) 时间复杂度删除一个元素。第一张图中我们介绍了Node中包含了一个冗余的key,其实它还包含了一个冗余的频率值,因为某些情况下,我们需要通过Node中的频率值,去频率哈希表中做查找,所以也需要一个冗余的频率值。fr=aladdin。

2023-07-28 10:42:35 85 1

原创 算法通关村—栈的实现的问题解析

入栈操作时,首先获得入栈前的元素个数 nnn,然后将元素入队到队列,再将队列中的前 nnn 个元素(即除了新入栈的元素之外的全部元素)依次出队并入队到队列,此时队列的前端的元素即为新入栈的元素,且队列的前端和后端分别对应栈顶和栈底。前端的元素是最后入栈的元素。的元素,再将 queue1和queue2互换,则 queue1的元素即为栈内的元素,queue 1的前端和后端分别对应栈顶和栈底。使用一个队列时,为了满足栈的特性,即最后入栈的元素最先出栈,同样需要满足队列前端的元素是最后入栈的元素。

2023-07-26 15:07:02 53 1

原创 算法通关村-队列和Hash的特征

假如我要测试20在不在这里结构里,则同样使用上面的公式来进行,很明显20模7=6,我们直接访问array[6]这个位置,但是只有6和13,所以返回false。假如我要测试13在不在这里结构里,则同样使用上面的公式来进行,很明显13 模7=6,我们直接访问array[6]这个位置,很明显是在的,所以返回true。将哈希表的每个单元作为链表的头结点,所有哈希地址为i的元素构成一个同义词链表。哈希(Hash)也称为散列,就是把任意长度的输入,通过散列算法,变换成固定长度的输出,这个输出值就是散列值。

2023-07-26 11:47:00 71 1

原创 算法通关村—栈的经典算法解析

LeetCode20. 给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。Leetcode22:数字n代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且括号组合。

2023-07-25 16:11:38 44

原创 算法通关村—如何基于数组(或者链表)实现栈

一般而言,把允许操作的一端称为栈顶(Top),不可操作的一端称为栈底(Bottom),同时把插入元素的操作称为入栈(Push),删除元素。采用顺序表实现的的栈,内部以数组为基础,实现对元素的存取操作。栈底层实现仍然是链表或者顺序表,栈与线性表的最大区别是数据的存取的操作被限制了,其插入和删除操作只允许在线性表的一端进。栈和队列是比较特殊的线性表,又称之为访问受限的线性表。栈是很多表达式、符号等运算的基础,也是递归的底层实现。top指向的是栈顶元素,新元素入栈时先top++,然后再将元素入栈。

2023-07-24 16:56:00 22

原创 算法通关村——双指针的妙用

LeetCode27.给你一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,并返回移除后数组的新长度。slow表示当前位置之前的元素都是不重复的,而fast则一直向后找,直到找到与slow位置不一样的 ,找到。LeetCode26 给你一个有序数组 nums ,请你原地删除重复出现的元素,使每个元素只出现一次 ,返回删除后数组的新长度。给定一个非负整数数组 A,返回一个数组,在该数组中, A 的所有偶数元素之后跟着所有奇数元素。你不需要考虑数组中超出新长度后面的元素。

2023-07-24 16:23:15 22

原创 算法通关村——不简单的数组增删改查

因为A是数组不能强行插入,如果从前向后插入,数组A后面的元素会多次移动,代价比较高。分析:如果对于所有 i <= j,A[i] <= A[j],那么数组 A 是单调递增的。如果对于所有 i <= j,A[i]> = A[j],那么数组 A 是单调递减的。例如已有序列为{3,4,7,8},如果插入的元素比8大,例如9,假如index=0,则最后结果是。这里如果是size-1,导致遍历只能到倒数第二位,例如{3,4,7,8},这里size-1=3,i<3则只能遍历到7。

2023-07-24 16:19:41 23

原创 算法通关村第二关 | 链表反转问题解析

题目:给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right。请你反转从位置 left 到位置 right 的链表节点,返回反转后的链表。题目: 给一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)反转的整体思想是,在需要反转的区间里,每遍历到一个节点,让这个新节点来到反转部分的起始位置。下面的图展示了整个流程。

2023-07-20 14:40:51 105 1

原创 算法通关村第二关——终于学会链表反转了

反转前后的结构和指针位置。执行期间的过程示意图。

2023-07-19 23:00:19 22

原创 算法通关村第一关——链表经典问题笔记

进一步分析,我们发现两个继续优化的点,一个是上面第一个大while里有三种情况,我们可以将其合并成两个,如果两个链表存在相同元素,第一次出现时使用if (l1.val

2023-07-19 16:30:46 60

原创 算法通关村第一关|双链表操作

双向链表是如何构造的,元素的插入和删除是如何实现的?

2023-07-18 11:37:49 137 1

原创 算法通关村第一关|链表青铜挑战笔记

小白也能学会的链表

2023-07-17 17:28:37 253 1

基于jsp+servlet的mvc模式下的校园BBS论坛

https://blog.csdn.net/weixin_44253799/article/details/106944414为详细报告

2020-06-24

空空如也

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

TA关注的人

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