自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 有关树的递归相关问题

明白区别以后我们可以仿照上一题写出递归,这个要求的是左右两个子树的高度差是否大于1,这里的结束条件还是当节点等于null时,这里的递归函数就成了求该节点左右两子节点树的高度,同时比较树的高度差。如果小于1则返会较高的树的高度,反之则返回-1。这里的关键问题是题目中说的:最小深度是从根节点到最近叶子节点的最短路径上的节点数量,也就是最小深度的一层必须要有叶子结点,因此不能直接用。更优雅的解法是用递归,对于三个节点的二叉树而言他的最大深度是左右子节点树中较大的那个数+1,递归的结束条件是当节点等于null时。

2023-11-27 16:09:40 365

原创 二叉树的遍历方法

我们都知道二叉树可以按照头结点的输出顺序分为:前序遍历、中序遍历和后序遍历。今天我们就来一起探讨一下二叉树这三种遍历方法分辨用算法如何实现?Leetcode144(前序遍历)、94(中序遍历)、145(后序遍历)。

2023-11-27 15:56:27 830

原创 二叉树遍历方法

我们都知道二叉树可以按照头结点的输出顺序分为:前序遍历、中序遍历和后序遍历。今天我们就来一起探讨一下二叉树这三种遍历方法分辨用算法如何实现?Leetcode144(前序遍历)、94(中序遍历)、145(后序遍历)。

2023-11-13 12:17:45 46

原创 无聊的层序遍历

树的层序遍历是关于树这类算法中最基础的考查内容,只要只要掌握了层序遍历,关于这类的算法问题基本都是在层序遍历算法上做修改而已,特无聊!

2023-11-07 14:42:14 41 1

原创 中序和后续生成二叉树

我们都知道我们可以通过两种方法对二叉树进行遍历:深度优先遍历和广度优先遍历。在深度优先遍历中通过父节点所在的位置又可以分为前序遍历、中序遍历和后序遍历。既然二叉树可以生成三种序列,同样我们也可以根据序列生成二叉树。

2023-11-06 16:43:48 40

原创 缓存淘汰算法实现

什么是LRU?LRU我们在学习Redis时听说过,是Redis中一种缓存淘汰策略,不光是Redis很多应用只要牵扯到缓存都要设置缓存淘汰策略。常用到的缓存淘汰策略有FIFO(先入先出)、LRU(最近最少使用)、LFU(最少使用)。FIFO先入先出就是队列的特性很好实现,今天我们主要讨论后两个。

2023-11-06 14:52:54 28

原创 n个数之和的问题

大致是这样的,第一层循环从0开始逐个获得数组的值,第二层指针j从第一次循环的下标加1处开始向后移动,第三层指针h从数组尾部开始从后向前遍历,当j=h时结束这层的便利。看到题的第一眼,很容易想到的一种解法是暴力双循环,两次循环两两相加,满足要求就输出。这怎么能行,必须再想个解法!但是,这一题难度可不止这些,难点在于不能有重复的三元组,数组中的数可以重复,但是输出的列表值要唯一。去重意味着相同值的数据我只需要循环一遍就行,例如i=0时值为-1,i=4时值也是-1这层循环就可以直接跳过就行,j也是一样。

2023-10-31 21:39:17 33 1

原创 有关哈希和队列的基础问题

哈希是指将任意长度的输入通过哈希函数转换成固定长度的输出的过程或结果。哈希函数是一种算法,它将输入数据映射到唯一的输出值,这个输出通常被称为哈希值或散列值。固定长度输出:无论输入数据的大小,哈希函数的输出长度是固定不变的。常见的哈希函数如 MD5、SHA-1、SHA-256 都有不同长度的输出。唯一性:不同的输入会得到不同的输出。即使输入数据只有微小的变化,哈希值也会有显著变化。不可逆性:从哈希值无法还原出原始输入数据。这意味着无法通过哈希值逆向推导出原始数据的内容。

2023-10-31 11:54:44 72 1

原创 栈如何实现计算器

我们通常将前缀式叫做波兰式,后缀时叫做逆波兰式,这就是波兰式的由来。我们先理解一下什么是表达式,表达式就是小学里学的类似(2+1)*3)这样的式子,根据不同的记法,有前缀、中缀和后缀三种方式,其区别在于运算符相对于操作数的位置,前缀表达式的运算符位于操作数之前,中缀和后缀同理,如下图,其实这就对应了树的前中后三种遍历方式。要将后缀式转换为中缀式,可以从左到右扫描后缀式,遇到数值时将其压入栈中,遇到运算符时将栈顶的两个数值弹出并计算,并将运算符插入两个数值之间,最后输出栈中的数值即可。加号:将数字压入栈;

2023-10-30 20:51:39 434 1

原创 经典问题之括号匹配

读完题以后我隐隐约约感觉应该是用递归做,但是我没想明白怎么拆分,后来用栈做的,大致思路是这样的:既然是要记录分数,我用栈来存储分数,先push一个0在栈底用于统计最后的结果。简单的说就是判断一个括号字符串里的括号是不是成对出现的。根据题目1的方法,用栈找到字符串中非有效括号的位置,将数组中的对应位置修改为1,遍历完成后数组就成了字符串的映射(1表示非有效括号,0表示有效括号)。这题要理解题目所说的最长有效括号,也就是第一个题目中的定义,给定的字符串中可能有多段有效括号,要找出最长的有效括号的长度。

2023-10-30 15:11:31 258 1

原创 基于数组或链表实现栈

在写算法中用于java的util中已经为我们提供好了Stack类,虽然方便了我们代码书写,但是要想搞懂栈真正的工作流程,我还是建议大家尝试一下自己用数组或者链表的方法手写一个栈试试。

2023-10-26 11:39:38 19

原创 数组出现次数问题

在数组算法题中我们经常会遇到问数组中某个数出现的次数,这种类型的题变式很多,例如问只出现一次的数,是否每个数的出现次数唯一等等,一般这种题型也相对较难,今天我们好一起来讨论一下。

2023-10-25 23:03:18 50 1

原创 数组中的双指针

在之前我们讨论过了双指针在链表中的妙用,今天我们来更进一步的探究一下双指针在数组中有那些巧妙的用法吧!我们先回忆一下链表中双指针是如何使用的,我们可以通过定义快慢指针,一个一次走一格,一个一次走两格来找到中间节点,还可以通过控制快慢指针的差距来获得某个节点,例如获取倒数第K个节点。而今天我们来讨论双指针在数组中的另一个用法,根据题干条件来控制slow节点的运动,这种用法会更灵活,没有之间限定死slow和fast的关系,而时再遍历中通过是否达成if条件来决定slow是否移动。

2023-10-24 20:31:47 25

原创 不简单的数组增删改查

数组的增删改查可能你乍一听就会觉得:呵!这还不简单?等到你自己写写看的时候你会发现你写出来不是跑不起来,就是下标对不上就是内存溢出。千万不要小看数组!!算法中最多的题型就是数组题,请大家务必熟练掌握数组的增删改查!!

2023-10-24 20:20:58 23

原创 链表反转进阶问题解析

上次我们用三个方法学会了链表反转的基本解决思路,没了解的可以先去看看我之前写的文章。那今天我们来看看对于进阶的链表反转问题我们应该怎么思考解决。

2023-10-20 12:24:13 23 1

原创 终于学会链表反转啦

本质上也是将两个节点之间的指向互换,递归的好处就是我可以通过一开始的递归能直接将head定位到尾结点,从尾结点开始两两节点改变指向从而反转链表。递归方法使用的非常巧妙,这种方法能掌握会更好。链表反转不仅能够考察你对链表增加,删除等方面的使用程度,同时考察使用者的算法能力和逻辑思维,可谓是面试的高频考点!通过两个指针标记节点,将前一个节点的next指向后一个节点实现两个节点的指向反转,进而实现整个链表反转。这个流程图看上去是不是很好理解,虚拟头结点是最简单的一种链表反转方法,本质上就是链表的删除和插入嘛。

2023-10-19 12:10:33 100

原创 链表中的环问题

这就意味着,如果fast走了n圈才和slow相遇则说明slow也已经走了(n-1)圈。确实,就像两个速度啊不一样的人赛跑,只要时间足够,快的那个人一定能追上慢的那个。知道了链表有环,又找到了相遇的节点,怎样才能找到入口呢?所以就能解释为什么让一个指针在链表头,一个指针在相遇位置,每次移动一格,他们一定会在入口处相遇。则有:AB+n(BC+CB)+BC= 2(AB+BC) => AB=CB+(n-1)(AB+BC)题目中的链表再某一个节点上出现了环,使他的尾节点又指向了该节点,让我们判断环的入口节点在哪?

2023-10-16 20:41:29 255 1

原创 链表青铜挑战笔记

想要在链表中间插入节点我们首先要获得插入位置的前一个节点和后一个节点,而同时具有这两个信息的就是插入位置的前一个节点!假设前一个节点为node,插入的新节点为newNode.首先将新节点的next属性修改为他的下一个节点,也就是原先node的下一个节点,newNode.next=node.next。同样要找到删除节点的前一个节点node,然后将node节点的nest属性修改为删除节点的下一个节点,也就是node.next.xext,即node.next=node.next.next。

2023-10-16 18:15:50 269 1

原创 经典链表问题之双指针

合并两个链表。这道题很简单!但是你可以试试用双指针能不能做呢?//双指针//让fast领先(b-a)while(fast!len--;a--;=null){“双指针解决链表问题好方便啊!”这是我在学习完双指针后的感触!双指针不仅在链表中有,数组中同样也有。通过双指针的思想我是不是可以大胆的扩展三指针?四指针?来通过一次遍历获得链表中的多个节点呢?算法最终要学的是他的思想,如何解题,如何想到这个方法的,不断的拓宽我们的思维。

2023-10-16 17:18:39 267

空空如也

空空如也

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

TA关注的人

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