- 博客(18)
- 收藏
- 关注
原创 代码随想录算法训练营第13天 |二叉树的学习
与深度优先搜索(DFS)不同,BFS 从起始节点开始,首先访问其所有邻居节点,然后再逐层向下深入到下一级的节点。这种逐层访问的方式确保了在无权重图中,从起始节点到任意其他节点的最短路径可以通过 BFS 得到。每次循环,先得到一个队列的大小为size,然后得到左右孩子,每次弹出一个,直到弹出size个,这种策略使得DFS能够深入到数据结构的最深处,然后逐层返回,直到遍历所有节点。左孩子为空,弹出中间,右孩子不为空,收集右孩子,再看右孩子的左孩子是否为空。深入到树或图的一个分支的尽可能深的节点。
2024-08-27 10:25:00
1168
原创 代码随想录算法训练营第11天 | 150. 逆波兰表达式求值、239. 滑动窗口最大值、347.前 K 个高频元素
栈定义:堆栈是一种后进先出 (LIFO) 的数据结构,适合处理逆波兰表示法表达式的计算。操作:在遇到操作数时,将其压入栈中;在遇到操作符时,从栈中弹出相应数量的操作数,进行计算后将结果再压入栈中。用途:在逆波兰表达式计算中,堆栈用于存储操作数和中间计算结果。解题思路里347.前 K 个高频元素(!!!题目链接:前K个高频元素解题思路里面。
2024-08-24 21:20:27
1193
原创 代码随想录算法训练营第10天 | 232.用栈实现队列、 225. 用队列实现栈、20. 有效的括号、1047. 删除字符串中的所有相邻重复项
队列(Queue)是一种先进先出(FIFO, First In First Out)的数据结构。这意味着在队列中,最早加入的元素会最先被移除。队列常用于需要按顺序处理任务或数据的场景,例如在操作系统中管理进程或在网络服务器中处理请求。队列的基本操作:入队(Enqueue):将一个元素添加到队列的尾部。出队(Dequeue):移除并返回队列的头部元素。查看队头元素(Peek or Front):查看但不移除队列的头部元素。判断队列是否为空(IsEmpty)。判断队列是否已满(IsFull)
2024-08-23 16:49:52
643
原创 代码随想录算法训练营第9天 | 151.翻转字符串里的单词 、28. 实现 strStr()、459.重复的字符串
在实现遇到的问题中卡码网:55.右旋转字符串题目链接:右旋转字符串实现遇到的问题中实现遇到的问题中。
2024-08-22 17:42:06
1091
原创 代码随想录算法训练营第8天 | 344.反转字符串、383.赎金信、15.三数之和、18.四数之和
原地操作原地反转意味着不能创建新的数组来存储结果,必须在原数组上直接进行操作。这要求对空间的使用非常谨慎。逐段处理字符串字符串按照2k字符一组进行处理,每组中的前k个字符需要被反转。需要处理字符串末尾的特殊情况,判断剩余字符的数量。// 2. 剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符continue;// 3. 剩余字符少于 k 个,则将剩余字符全部反转字符判断:使用来判断字符是否是数字,这样可以清晰地识别并替换数字字符。性能优化。
2024-08-20 16:11:08
682
原创 代码随想录算法训练营第7天 | 454.四数相加Ⅱ、383.赎金信、15.三数之和、18.四数之和
先预处理前两个数组,放在map中,再预处理后两个数组,再在map查是否有我们想要的元素。这个题目考察了字符串操作和字符频率统计的基本技巧。解决方法的核心是确保magazine中的字符能够满足ransomNote中的需求。通过频率统计,可以在一次遍历内解决这个问题,有效地提升了算法的性能。双指针法注意return和break的区别。
2024-08-19 23:31:14
1307
原创 代码随想录算法训练营第6天 | 242.有效的字母异位词、 349. 两个数组的交集、202.快乐数、1.两数之和
当数据较少时,可以用数组类型做哈希表。349. 两个数组的交集题目链接:两个数组的交集数组适合场景:简单键值对存储:如果你需要存储简单的键值对,并且键是连续的整数(如从0开始),数组是一个简单而高效的选择。数组在访问和存储元素时非常高效,时间复杂度为O(1)。数组不能处理非整数或非连续的键,不能动态调整大小(除非使用ArrayList),也不适合存储重复键。set适合场景:存储唯一元素:当你需要存储一组唯一元素(没有重复),并且对元素的顺序没有要求时,Set是理想选择。Set。
2024-08-18 22:17:23
848
原创 Mysql的基本操作
mysql是一个客户端-服务器结构的程序mysql的服务器是真正的本体,负责保存和管理数据,数据都是存储在硬盘上的。内存:速度快,空间小,成本大,数据易失硬盘:速度慢,空间大,成本小,数据持久保存(一个硬盘在断电的情况下里面数据也就保持几年到几十年)
2024-08-16 13:15:43
293
原创 排序的学习
默认从小到大排序值相等,相对位置没有发生改变则是稳定的排序内部排序:数据元素全部放在内存中的排序。(我们所讲一般是内部排序)外部排序:数据元素太多不能同时放在内存中,根据排序过程的要求不能在内外存之间移动数据的排序。差入排序i++) {//i-1后面那个数for (;j>=0;j--) {//这里加不加等号和稳定有关系//但是本身就是一个稳定的排序可以实现为不稳定的排序//本身是一个不稳定的排序不可以变成一个稳定的排序}else {break;
2024-08-12 15:21:13
181
原创 堆的学习PriorityQueue
2、找到左右孩子的最大值和根节点进行比较,如果比根节点大,那么就交换。3、如果能知道子树的根节点下标,那么下一棵子树就是当前节点下标-1。左右孩子找到最大值,与根比较,如果比根大就交换。4、一直调整到0下标这棵子树停止。1、从最后一棵子树开始调整的。大根堆根节点比左右孩子都大。堆的删除一定删的是堆顶元素。实现是一个完全二叉树。
2024-08-11 15:24:45
221
原创 二叉树的学习
完全二叉树是效率很高的数据结构,完全二叉树是由满二叉树而引出来的。:若一个结点含有子结点,则这个结点称为其子结点的父结点。n 个结点的二叉树,当且仅当其每一个结点都与深度为K。:以某结点为根的子树中任一结点都称为该结点的子孙。:一个结点含有的子树的根结点称为该结点的子结点。左孩子的引用,常常代表左孩子为根的整棵左子树。右孩子的引用,常常代表右孩子为根的整棵右子树。左孩子的引用,常常代表左孩子为根的整棵左子树。右孩子的引用,常常代表右孩子为根的整棵右子树。左子树的高度,与右子树的高度的最大值加1。
2024-08-10 13:24:17
780
原创 队列的学习
这个双向链表提供一个头删,尾插。Queue 普通的队列,接口。栈是先进后出,队列是先进先出。先进先出的特点,类似于排队。Deque双端队列,接口。实现了Deque这个接口。
2024-08-07 19:32:45
546
原创 栈的学习,及部分题目
使用两个栈,一个栈存放元素,一个栈存最小元素,第一个元素都要存,当后面元素比第一个元素小时,存入minStack中,当要返回最小时直接pop()minStack。计算的时候遇到运算符之后运算符前一个在运算符右边,运算符前前一个在运算符左边,然后计算后再存入栈中,代替运算符及其前两个。思路:左括号入栈,遇到右括号时,比较栈顶元素是否匹配,匹配就pop一下出栈。删除时,当右边元素等于左边栈顶元素时,右边元素也要删除。2.每push一个元素,就和pop中数组的元素比较。1.遍历push数组,把元素放到栈中。
2024-08-07 14:19:50
367
原创 代码随想录算法训练营第4天 | 24.两两交换链表中的节点、707.设计链表、160.链表相交、142.环形链表
由于删除增加操作要在删除节点位置前一个操作,所以fast应比slow多走n+1步,当fast指向null时slow指向倒数第n+1.快指针每次走两步,慢指针每次走一步,相当于快指针每次以一个节点的速度靠近慢指针,所以成环时快慢指针一定相遇。使用双指针,当fast比slow多走n步时,当fast指向null时slow指向倒数第n个。如何判断一个链表是否有环,用一个快指针一个慢指针,如果他们相遇就说明有环。当前cur要在交换的两个之前才能实现操作。
2024-08-06 01:29:39
285
原创 代码随想录算法训练营第3天 | 203.移除链表元素、707.设计链表、206.反转链表
虚拟头节点法可以有效地从列表中删除具有指定值的所有节点,同时借助虚拟节点优雅地处理边缘情况,及可以统一处理边缘的方法。
2024-08-05 16:31:14
423
原创 代码随想录算法训练营第2天 | 209.长度最小的子数组、59螺旋矩阵Ⅱ
滑动窗口:确定何时扩大窗口,确定何时缩小窗口,在窗口滑动的哪个阶段更新结果,怎么移动窗口(不断变更i(子序列的起始位置))。
2024-08-03 23:12:43
213
1
原创 代码随想录算法训练营第1天 | 704.二分查找、27.移除元素、977.有序数组的平方
二分查找中查找某一个数,处理好搜索区间即可快速解决该问题。在处理数组和链表左右指针和快慢指针。本题使用到了快慢指针。%5E%7B2%7D。
2024-08-03 02:38:07
885
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人