自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 代码随想录算法训练营D17

分别求出其左右子树的高度,然后如果差值小于等于1,则返回当前二叉树的高度,否则返回-1,表示已经不是二叉平衡树了。如何判断以当前传入节点为根节点的二叉树是否是平衡二叉树呢?当然是其左子树高度和其右子树高度的差值。然后处理递归操作时重点是递归和回溯是一一配套的,有一个递归就要有一个回溯。终止条件:找到叶子节点,这代表着一条边的路径已经找到了。D16: 我来还债了。

2024-03-25 15:49:02 280 1

原创 代码随想录算法训练营D16

然后考虑对于一颗完全二叉树,则必定存在递归到某一深度一定会有左孩子或者右孩子为满二叉树。然后按照满二叉树计算即可。通过递归树的左节点深度和右节点深度,如果两个深度相同代表这是一颗满二叉树,那么该二叉树的节点数就是。求完全二叉树的节点数之前首先考虑满二叉树是一种完全二叉树。那么可以先判断二叉树是不是满二叉树。重点是循环体内,要注意循环终止条件,也就是左右节点有任意为空时就返回。就是将2左移leftdep位,也就是。,也就是根节点不会是最小深度节点。这个和上面104的问题在于,

2024-03-21 15:39:28 525 1

原创 代码随想录算法训练营D15

在单层遍历的时候记录一下本层的头部节点,然后在遍历的时候让前一个节点指向本节点就可以了。这里循环变量不能是que.size(),因为队列的大小在时刻变化。确定终止条件:这个条件包括,左节点和右节点为空,以及左右节点的值。层序遍历的应用,直接修改一下,返回二维向量就行了。确定参数,确定终止条件,确定递归操作,代码如下。同理,层序遍历时记录每层最大值,代码略。这个就是每层计算一次平均值,代码略。确定递归操作:二叉树的外圈和内圈。确定递归参数:左节点和右节点。遍历的层数就是二叉树的深度。D14: 樱花真好看。

2024-03-21 14:08:39 316 1

原创 代码随想录算法训练营D14

完全二叉树:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。平衡二叉搜索树:又称为AVL,它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。将访问的节点直接加入到栈中,但如果是处理的节点则后面放入一个空节点, 这样只有空节点弹出的时候,才将下一个节点放进结果集。后序就是在前序的基础上,先入左孩子,再入右孩子,这样出栈是中右左,然后反转结果即可。满二叉树:深度为k,有2^k-1个节点的二叉树。

2024-03-19 22:50:06 349

原创 代码随想录算法训练营D13

构筑一个单调队列,队列没有必要维护窗口里的所有元素,只需要维护有可能成为窗口里最大值的元素就可以了,同时保证队列里的元素数值是由大到小的。总结:今天主要是大小顶堆的构建,和单调队列。理解了如何构建单调队列那么滑动窗口问题就很简单了。频率最高的k个元素,涉及到大顶堆和小顶堆的构建。D12: 好想出去玩。

2024-03-17 11:26:14 253 1

原创 代码随想录算法训练营D11

总结:今天主要是栈的基本使用,注意点是检查括号那里,在匹配左括号的时候,右括号先入栈,就只需要比较当前元素和栈顶相不相等就可以了。对于后缀表达式,计算机可以利用栈来顺序处理,不需要考虑优先级了。也不用回退了, 所以后缀表达式对计算机来说是非常友好的。D11: 好多笔试,但怎么都过不了😓。

2024-03-16 09:40:55 539 1

原创 代码随想录算法训练营D10

用栈来模拟队列,需要两个栈一个输入栈,一个输出栈,在push数据的时候,只要数据放进输入栈就好,但在pop的时候,操作就复杂一些,输出栈如果为空,就把进栈数据全部导入进来(注意是全部导入),再从出栈弹出数据,如果输出栈不为空,则直接从出栈弹出数据就可以了。deque是一个双向队列,只要封住一段,只开通另一端就可以实现栈的逻辑了。SGI STL中 队列底层实现缺省情况下一样使用deque实现的。总结:队列和栈的基本用法和模拟操作,队列FIFO,栈LIFO。D10: 最近好累💤,感觉还是睡不着。

2024-03-15 11:00:29 582 1

原创 代码随想录算法训练营D9

如果 s[i] 与 s[j + 1] 相同,那么就同时向后移动i 和j 说明找到了相同的前后缀,同时还要将j(前缀的长度)赋给next[i], 因为next[i]要记录相同前后缀的长度。本题要在文本串字符串中找出模式串出现的第一个位置 (从0开始),所以返回当前在文本串匹配模式串的位置i 减去 模式串的长度,就是文本串字符串中出现模式串的第一个位置。那么 s[i] 与 s[j+1] 不相同,就要找 j+1前一个元素在next数组里的值(就是next[j])。依然因为next数组里记录的起始位置为-1。

2024-03-14 15:16:50 1112 1

原创 代码随想录算法训练营D8

rotateString函数接受一个字符串s和一个整数k作为参数,然后将s中的所有字符向后移动k位。std::rotate的第一个参数是旋转开始的位置(这里从字符串的开始开始),第二个参数是新的“第一个”元素应该在哪里(这里是end() - k,表示向后移动k位后的开始位置),最后一个参数是旋转的结束位置(这里是字符串的末尾)。看了Carl的指导,使用双指针法,左指针指向旧字符串长度的尾部,右指针指向新字符串长度的尾部。总结:今天是字符串的基础操作,包括使用双指针法来替换字符串内容。

2024-03-13 11:35:10 1095

原创 代码随想录算法训练营D7

set是一个集合,里面放的元素只能是一个key,而两数之和这道题目,不仅要判断y是否存在而且还要记录y的下标位置,因为要返回x 和 y的下标。这个确实哈希表有困难,双指针法就简单了,固定数组元素i,左指针指向i+1个元素,右指针指向数组尾部,然后根据左右指针之和来和-i比较,再移动左指针或者右指针。先创建map保存a+b的和,再创建map保存c+d的和,然后在第二个map中找。总结:哈希表告一段落,重点是如何理解三种不同的结构的适用场景,数组的大小是有限的,受到系统栈空间(不是数据结构的栈)的限制。

2024-03-12 10:39:32 1136 1

原创 代码随想录算法训练营D6

线性探测法:当发生碰撞时,即一个键的哈希值对应的位置已经被占用时,就探测哈希表中的下一个位置。如果下一个位置也被占用,则继续向后探测,直到找到一个空的位置为止。在C++中,char类型的数据实际上是以ASCII码的形式存储的。总结:哈希表的基础使用,包括数组,set,map。使用map作为哈希表来求解,重点是如何避免重复索引,所以使用先查早索引,再添加值到map里。这道题由于查找到是数组值,需要的数组下标,所以数组值是key,数组下标是value。哈希表的简单应用,直接使用数组作哈希表就行了,代码如下。

2024-03-11 11:32:45 1353

原创 代码随想录算法训练营D4

慢指针指向链表头,快指针指向第n个节点,也就是快慢指针n步,然后快慢指针同时移动,当快指针指向链表尾的时候,慢指针的下一个节点就是要删除节点。那么相遇时: slow指针走过的节点数为: x + y, fast指针走过的节点数:x + y + n (y + z),n为fast指针在环内走了n圈才遇到slow指针, (y+z)为 一圈内节点的个数A。求出两个链表的长度,并求出两个链表长度的差值,然后让curA移动到,和curB 末尾对齐的位置,,然后同时移动curA和curB,两者相遇则代表链表相交。

2024-03-09 15:29:45 2877 1

原创 代码随想录算法训练营D3

虚拟头节点是在链表最开始之前额外添加的一个节点dummy,它的值通常不被使用(或者设为一个特定的默认值,主要用于简化删除和插入,避免对空链表的特殊处理,减少错误和提高代码的可读性,优化性能(也就是减少对特殊情况的判断)。,操作时反转节点后,先移动pre指针到cur指针位置,然后cur指针向后移动。原因在于对于 deleteAtIndex 方法,如果在删除节点后链表还可能有其他操作,将已删除节点的指针置空是一个良好的做法,以。反转链表,当然直接搞个新链表也是可以的,但是浪费了内存空间。

2024-03-08 11:25:26 1589

原创 代码随想录算法训练营D2

这个难点在于窗口的起始端如何移动,以这个题而言,既然子串已经大于目标了,起始端当然是要往窗口尾部移动,从而缩小子串找到目标。另外一点是,只要子串>=目标,就要移动起始位置,计算子串长度。重新看了讲解后,数组的滑动窗口问题,要先移动一端,再移动另一端,类似上面的双指针,固定一端,移动另一端。也就是说,每次螺旋时候,要保证四个方向剩余的量是相同的,才能方便后续代码。循环问题,边界条件是什么,要保证边界条件的统一,左闭右开还是左闭右闭。双指针法,两个指针的指向,是一快一慢,还是从两边指向中间。

2024-03-07 15:32:33 2395

原创 代码随想录算法训练营D1

左闭右闭写法的话,[low,high]是有效的,所以while后面是可以low<=high的,如果是左闭右开,就不能<=了,因为[low,high)无效。D1: 为什么报这个群呢,之前一直很难坚持,我觉得还是报个群,然后大家一起写,一起打卡会坚持住。:题目还是很简单的,二分查找,属于是自己写会写,但是会有小细节漏下。重点是左闭右开还是左闭右闭。递归写法,先确定确定递归函数,返回值以及参数,然后确定递归终止条件,如果是左闭右开,就要改成。后,还有一种相向双指针法,改变了元素相对位置,确保了移动最少元素。

2024-03-06 10:15:36 2196

空空如也

空空如也

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

TA关注的人

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