- 博客(17)
- 收藏
- 关注
原创 《算法通关村——二分查找在数组中的应用》
注意,数组 [a[0], a[1], a[2], ..., a[n-1]] 旋转一次的结果为数组 [a[n-1], a[0], a[1], a[2], ..., a[n-2]]。解释:原数组为 [0,1,2,4,5,6,7] ,旋转 4 次得到输入数组。●若旋转 4 次,则可以得到 [4,5,6,7,0,1,2]●若旋转 7 次,则可以得到 [0,1,2,4,5,6,7]输入:nums = [4,4,4,5,1,2,3]输入:nums = [4,5,6,7,0,1,2]
2023-08-11 16:09:28
135
1
原创 算法通关村——透彻理解二分查找
二分查找涉及的很多的边界条件,逻辑比较简单,但就是写不好。只要 low和high没有溢出,上面的mid一定不会溢出。low + high可能会溢出。
2023-08-11 16:09:20
150
1
原创 《算法通关村—轻松搞定最大深度问题 》
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。至于入参,自然是要处理的子树的根节点root,而返回值则是当前root所在子树的最大高度。这里的关键问题是题目中说的:最小深度是从根节点到最近叶子节点的最短路径上的节点数量,也就是最小深度的一层必须要有叶子结点,因此不能直接用。对于node(3),最大深度自然是左右子结点+1,左右子节点有的可能为空,只要有一个,树的最大高度就是1+1=2。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
2023-08-11 16:09:06
133
1
原创 《算法通关村—轻松搞定二叉树里的双指针》
LeetCode617.给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。因为我们要通过递归函数的返回值来判断两个子树的内侧节点和外侧节点是否相等,所以准确的来说是一个树的遍历顺序是左右中,一 个树的遍历顺序是右左中。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。输入:p = [1,2,3], q = [1,2,3]
2023-08-11 16:08:53
156
1
原创 白银挑战——二叉树的层次遍历经典问题
广度优先在面试里出现的频率非常高,整体属于简单题,但是很多人面试遇到时就直接放弃了,实在可惜。我们本章就集中研究一下到底难在哪里。广度优先又叫层次遍历,基本过程如下:层次遍历就是从根节点开始,先访问根节点下面一层全部元素,再访问之后的层次,类似金字塔一样一层层访问。1. 首先3入队。2. 然后3出队,之后将3的左右子孩子9和10 保存到队列中。3. 之后9出队,将9的左右子孩子8和13入队。4. 之后20出队,将20的左右子孩子15和7入队。
2023-08-11 16:08:22
91
1
原创 青铜挑战——理解树的结构
树是一个有n个有限节点组成一个具有层次关系的集合,每个节点有0个或者多个子节点,没有父节点的节点称为根节点,也就是说除了根节点以外每个节点都有父节点,并且有且只有一个。最后再说一说二叉树中深度优先和广度优先遍历实现方式,我们做二叉树相关题目,经常会使用递归的方式来实现深度优先遍历,也就是实现前中后序遍历,使用递归是比较方便的。顾名思义就是顺序存储的元素在内存是连续分布的,而链式存储则是通过指针把分布在各个地址的节点串联一起。看如下中间节点的顺序,就可以发现,中间节点的顺序就是所谓的遍历方式。
2023-07-31 15:59:17
53
1
原创 《算法通关村—用队列实现栈问题解析》
3.出栈操作时,在A中元素保留一个的情况下将A中元素依次入队列B,最后直接让A中的剩下的那一个元素出队列即可,执行完,交换AB队列(方便下次出栈)请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。4,取栈顶元素操作时,和出栈操作一样,不过访问完A的唯一元素后,再存放到B(保持数据的完整性),最后交换AB即可。2.A用来执行入队列(每次入队列时只要放入A即可)int pop() 移除并返回栈顶元素。int top() 返回栈顶元素。
2023-07-31 15:59:03
90
1
原创 青铜挑战——队列和Hash的特征
综上所述,根据散列函数H(key)和处理冲突的方法将一组关键字映射到一个有限的连续的地址集(区间)上,并以关键字在地址集中的“象” 作为记录在表中的存储位置,这种表便称为。我们发现有些在Hash中很多位置可能要存两个甚至多个元素,很明显单纯的数组是不行的,这种两个不同的输入值,根据同一散列函数计算出的散列值相同的现象叫做碰撞。开放定址法就是一旦发生了冲突,就去寻找下一个空的散列地址,只要散列表足够大,空的散列地址总能找到,并将记录存入。映象到地址集合中任何一个地址的概率是相等的,则称此类散列函数为。
2023-07-31 15:58:44
47
原创 《算法通关村—如何基于数组实现栈》
栈底层实现仍然是链表或者顺序表,一般而言,把允许操作的一端称为栈顶(Top),不可操作的一端称为栈底(Bottom),同时把插入元素的操作称为入栈(Push),删除元素的操作称为出栈(Pop)。再看具体内容之前,先补充一点,top有的地方指向栈顶元素,有的地方指向栈顶再往上的一个空单位,这个根据题目要求设计就好。栈和队列是比较特殊的线性表,又称之为访问受限的线性表。栈是很多表达式、符号等运算的基础,也是递归的底层实现。●peek():显示栈顶元素,但是不出栈。●push(E):增加一个元素E。
2023-07-31 15:57:55
74
1
原创 算法通关村—括号匹配问题解析
首先看题目要求,LeetCode20. 给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。1左括号必须用相同类型的右括号闭合。2左括号必须以正确的顺序闭合。输入:s = "()[]{}"
2023-07-28 17:14:51
30
1
原创 算法通关村——双指针的妙用
元素的顺序可以改变。解释:函数应该返回新的长度 5 , 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。解释:函数应该返回新的长度 2 ,并且原数组 nums 的前两个元素被修改为 1, 2。输入:nums = [0,1,2,2,3,0,4,2], val = 2。输入:nums = [0,0,1,1,1,2,2,3,3,4]输入:nums = [3,2,2,3], val = 3。输出:5, nums = [0,1,4,0,3]输出:5, nums = [0,1,2,3,4]
2023-07-27 15:19:08
36
1
原创 算法通关村——不简单的数组增删改查
数组是线性表最基本的结构,特点是元素是一个紧密在一起的序列,相互之间不需要记录彼此的关系就能访问,例如月份、星座等。
2023-07-26 14:58:58
29
1
原创 算法通关村第二关——指定区间反转问题解析
LeetCode92 :给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right。请你反转从位置 left 到位置 right 的链表节点,返回反转后的链表。示例 1:输入:head = [1,2,3,4,5], left = 2, right = 4输出:[1,4,3,2,5]
2023-07-23 10:01:57
29
1
原创 算法通关村第二关——终于学会链表反转了
虚拟头结点的作用,可以使原链表的所有节点就都可以按照统一的方式进行移除了。这样移除了一个头结点,是不是发现,在单链表中移除头结点 和 移除其他节点的操作方式是不一样,其实在写代码的时候也会发现,需要单独写一段逻辑来处理移除头结点的情况。来看看如何设置一个虚拟头。依然还是在这个链表中,移除元素1。这里来给链表添加一个虚拟头结点为新的头结点,此时要移除这个旧头结点元素1。这样是不是就可以使用和移除链表其他节点的方式统一了呢?直接使用Head=Head.next。
2023-07-19 16:56:19
136
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人