自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 算法通关村-判断两棵树是否相同

解决思路:同时对两个树进行前序遍历,如果节点值不同就返回false,如果一个为null一个不为null也返回false。如果全部相同则返回true。题目:给你两颗二叉树的根节点p和q,编写一个函数来检验这两棵树是否相同。如果两个数在结构上相同且节点具有相同的值,则认为它们是相同的。

2023-10-17 21:08:21 249

原创 算法通关村-递归简介

如果递归没有终止条件,将会无休止的继续下去,直到出现 StackOverflowError ,并且终止条件必须要在调用自己之前。递归可以实现链表的正序打印和逆序打印,递归递归一递一归。如果终止条件放到调用自己之后,就会出现死循环。递归包含三部分:终止条件,递,归。递归代码实现链表的正序打印。递归代码实现链表的逆序打印。递归代码实现斐波那契数列。

2023-10-17 17:42:33 147

原创 算法通关村-使用递归实现树的前中后序遍历

使用递归实现树的前序遍历。使用递归实现树的中序遍历。使用递归实现树的后序遍历。

2023-10-17 17:29:08 159

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

使用递归实现二叉树的前序遍历是比较简单的,如果使用迭代来实现二叉树的前序遍历就会比较困难。这里实现的方式是通过栈来进行实现。前序遍历是中左右,如果还有左子树就一直向下找,完了之后再返回从最底层逐步向上向右找。

2023-10-17 17:25:44 170

原创 算法通关村-用栈实现队列

将一个栈当做输入栈,用于压入push传入的数据;另一个栈当作输出栈,用于pop和peek操作。每次pop或peek时若输出栈为空则将输入栈的全部数据依次弹出并压入输出栈,这样输出栈从栈顶往栈底的顺序就是队列从首部到尾部的顺序。栈的特点是后进先出,队列的特点是先进先出。两个栈将底部拼接到一起就能实现队列的效果。

2023-10-14 13:05:17 86 1

原创 算法通关村-LRU算法的实现

LRU:Least Recently Used的缩写,即最近最少使用。LRU算法是内存淘汰场景下使用的一个算法,当内存满了,不得已删除某些数据时,然后选择最久时间没使用的数据进行删除。实现LRU算法可以通过HashMap+双向链表的方式来实现,整个过程都是O(1)的时间复杂度,效率很高。

2023-10-14 10:56:23 83 1

原创 使用链表实现队列

使用链表实现队列非常简单,成员变量只需要定义一个链表节点。先进去的数据放在链表的头部,后进去的数据依次放在链表尾部。每次出队列的时候只需要把头部的数据获取就可以了,然后node.next=node.next.next,删除原先的链表节点。队列的特点:先进先出。

2023-10-13 20:46:04 43

原创 算法通关村-使用栈解决计算器问题解析

使用栈进行符号存储,遍历字符串,如果是数字直接存储到栈中,如果是符号,判断如果是乘除符号就优先计算。优先计算通过弹栈来进行优先计算。1.代码中preSign的使用来进行符号判断。

2023-10-06 20:03:22 141 1

原创 算法通关村-使用栈解决括号匹配问题解析

使用map存储一些括号对应的关系映射,然后使用栈这个先进后出的数据结构进行数据存储,遍历字符串,将左括号存入栈中,如果是右括号便进行弹栈,进行比较。给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。2.在弹栈之后如何知道两个括号是否满足要求,这个时候就要使用map来进行存储这个关系。s 仅由括号 ‘()[]{}’ 组成。输入:s = “()[]{}”输入:s = “([)]”输入:s = “{[]}”输入:s = “()”输入:s = “(]”

2023-10-06 19:34:57 152 1

原创 算法通关村-基于数组实现栈

1.在入栈的时候要进行数组扩容;这里还有一个注意事项就是因为使用的是int类型数据,考虑int溢出的情况,目前这里代码没有实现。stack.peek() //查看栈顶元素。stack.isEmpty() //判断栈是否为空。stack.push() //入栈。stack.pop() //出栈。

2023-10-06 17:26:47 51 1

原创 算法通关村-数组-双指针-有趣的颜色分类问题

与方式1相比,在这个方法里面我们多了一个指针,总共是3个指针。但是并不难理解,反而看完之后会觉得很巧妙。对数组进行遍历,如果是0就和左指针进行交换,如果是2就和右指针进行交换。与方式1相比这里的效率更高,因为只对数组进行了一次遍历。方式1对数组进行了两次遍历。我们对数组进行两次遍历,第一次遍历我们将数组中的0移动到数组的头部,并保留一下此时左指针的位置;第二次遍历将1逐次放到0的后面。这个题目可以使用双指针来进行解决。第一种方式是与冒泡排序类似的用快慢双指针实现的方式,另一种是使用对撞指针的方式来实现。

2023-10-05 23:37:50 87

原创 算法通关村-双指针思想在数组中的妙用

在如上例子中如果要是使用原始删除的方式就要调用多次方法来实现,如果使用双指针来实现只需要遍历一次就可以。题目:原地移除所有数值等于val的元素。

2023-10-01 22:39:54 76

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

思路:这里题目有一个前提假设数组是单调递增的。从后向前遍历,如果数据符合要求就插入,如果不符合要求就将数据后移。最后对于左边界的情况判断i是否为0,如果为0直接插入。

2023-09-30 22:25:17 68 1

原创 《算法通关村---使用对撞双指针解决字符串的反转和回文字符串问题》

本章总共解决下列七个问题:1.使用对撞双指针反转字符串2.使用对撞双指针进行K个一组反转3.使用对撞双指针仅仅对字符串中的字母进行反转4.使用对撞双指针反转句子中的英文单词1(将整个单词反转)5.使用对撞双指针反转句子中的英文单词2(将各个单词中的字母反转)6.使用对撞双指针判断一个字符串是否是回文字符串7.使用对撞双指针判断一个字符串是否是回文字符串2,(需要先对字符串做处理)

2023-09-24 20:21:53 94 1

原创 《算法通关村--不简单的字符串转换问题之将字符串转换为32位有符号整数》

判断溢出分成两部分逻辑判断,一部分逻辑是直接 /10,判断res十位到最高位部分是否会溢出,另一部分逻辑是%10取余判断个位的数字是否会超出范围溢出。(32位有符号整数就是int类型数据范围,最高位表示正负,其余31位表示数据范围,这个范围就是-2147483648~2147483647)4.如果输出的整数在[-2^31,2^31-1]范围外,需要截断这个整数,使其保持在这个范围内。解析:逐个读取时碰到字母a不是数字,中断读取,这个时候输出就是23。解析:去除前导空格,然后读取正负符号,并输出数字-42。

2023-09-24 11:25:00 241 1

原创 算法通关村第六关-层序遍历原来如此简单

如图,给定一个二叉树,它的层序遍历读出来就是5 4 6 1 2 7 8就和我们看书一样,按照从左到右从上到下的顺序读树节点的值就是层序遍历。

2023-09-09 22:56:53 358 1

原创 算法通关村第六关-如何使用中序和后序来恢复一棵二叉树

然后看左子树 1 4 2 在后序序列[1 2 4 7 8 6 5 ]中的排列是 1 2 4 ,由此我们就可以得出 1 4 2 左子树的中间节点为 4 ,然后中序序列排列是 1 4 2 我们就可以得出 1 是中间节点为4的左子树, 2便是它的右子树。第一轮:根据后序序列我们知道根节点是 5 ,然后在中序序列中我们就可以得出 1 4 2 是根节点5的左子树 7 6 8 是根节点 5 的右子树。备注:知识点1和知识点2的恢复思路是一样的,这里就只演示一下通过中序和后序来恢复二叉树。

2023-09-09 22:04:01 388 1

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

如上图所示,对A节点遍历依次安置在虚拟节点的下一节点上。整个过程可以理解为链表的插入操作,被插入的链表是虚拟节点作为头指针作为头节点的链表,插入的链表就是A链表。所以首先就是学会链表的插入操作然后做这个就比较容易了。首先说明一下什么是链表反转,如下图所示,给出一个A链表:a1,a2,a3。将它的结构变为如下B链表的样式:a3,a2,a1。这种方法不需要额外定义一个节点,遍历原链表,然后取出的每个节点的下一个节点指在pre节点上。(2)直接操作链表来实现(又名穿针引线法)(1)使用虚拟节点(又名头盔法)

2023-08-29 20:50:54 615 2

原创 编程导航算法通关村第一关|两个链表第一个公共节点

比如:A链表为a1,a2,c1,c2,c3 B链表为b1,b2,b3,c1,c2,c3 B链表的长度比A长1,那么把B链表的b1去除。思路:先将A链表放在set集合中,然后在遍历B链表的过程中如果发现在set集合中存在该节点,则说明该节点就是第一个公共节点。假如A链表为a1,a2,c1,c2,c3 B链表为b1,b2,b3,c1,c2,c3。A+B为 a1,a2,c1,c2,c3,b1,b2,b3,c1,c2,c3。B+A为 b1,b2,b3,c1,c2,c3,a1,a2,c1,c2,c3。

2023-08-28 23:58:50 668

原创 编程导航算法通关村第一关|青铜教程学习

注意事项:不要直接用方法传进来的头节点head进行遍历,定义一个中间节点tempNode存储头节点的引用。否则会导致原先head节点的引用地址被改变。构造一个链表节点,节点包含两部分组成:数据和指向下一个链表节点的引用。next表示指向下一个链表节点的引用。val表示链表节点存储的数据;代码:使用节点组成一个链表。

2023-08-28 15:13:13 746

空空如也

空空如也

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

TA关注的人

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