- 博客(14)
- 收藏
- 关注
原创 代码随想录算法训练营DAY 18|513.找树左下角的值 112. 路径总和 113.路径总和ii 106.从中序与后序遍历序列构造二叉树 105.从前序与中序遍历序列构造二叉树
理论知识:如何根据两个顺序构造一个唯一的二叉树,就是以 后序数组的最后一个元素为切割点,先切中序数组,根据中序数组,反过来再切后序数组。题目链接:https://leetcode.cn/problems/construct-binary-tree-from-inorder-and-postorder-traversal/第四步:切割中序数组,切成中序左数组和中序右数组 (顺序别搞反了,一定是先切中序数组)第五步:切割后序数组,切成后序左数组和后序右数组。第一步:如果数组大小为零的话,说明是空节点了。
2023-05-08 15:14:40
161
原创 代码随想录算法训练营DAY 16|● 104.二叉树的最大深度 559.n叉树的最大深度 ● 111.二叉树的最小深度 ● 222.完全二叉树的节点个数
二叉树节点的高度:指从该节点到叶子节点的最长简单路径边的条数后者节点数(取决于高度从0开始还是从1开始)(叶子节点,左右孩子都为空的节点才是叶子节点!知识回顾:二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。二叉树节点的深度:指从根节点到该节点的最长简单路径边的条数或者节点数(取决于深度从0开始还是从1开始)可以使用前序(中左右),也可以使用后序遍历(左右中),使用前序求的就是深度,使用后序求的是高度。而根节点的高度就是二叉树的最大深度,所以本题中我们通过后序求的根节点高度来求的二叉树最大深度。
2023-04-20 21:29:48
147
原创 代码随想录算法训练营DAY 15| 层序遍历 10 226.翻转二叉树 101.对称二叉树 2
要遍历两棵树而且要比较内侧和外侧节点,所以准确的来说是一个树的遍历顺序是左右中,一个树的遍历顺序是右左中。判断对称二叉树,比较的是两个树(这两个树是根节点的左右子树),比较的是两个子树的里侧和外侧的元素是否相等。思路:把每一个节点的左右孩子交换一下,使用前序遍历和后序遍历。别忘记空节点,数值不相同的情况。
2023-04-20 17:29:00
178
原创 代码随想录算法训练营DAY 14| 二叉树理论基础 递归遍历 迭代遍历
前序遍历是中左右,每次先处理的是中间节点,那么先将根节点放入栈中,然后将右孩子加入栈,再加入左孩子。(因为这样出栈的时候才是中左右的顺序。确定递归函数的参数和返回值 void traversal(TreeNode* cur, vector& vec)递归三要素:确定递归函数的参数和返回值、确定终止条件、确定单层递归的逻辑。处理(将元素放进result数组中)顺序和访问(遍历节点)顺序是不一致的。
2023-04-20 15:55:42
173
原创 代码随想录算法训练营DAY 13| 239. 滑动窗口最大值 347.前 K 个高频元素
队列出口元素是窗口里最大元素,每次从队尾push进元素时,需要与其前面的元素比较,从队尾pop出比其小的元素,每次pop元素时,需要将新元素与队列出口元素对比,如果值等于队列出口元素,则将队列出口元素pop出,在一个窗口内进行操作获取最大值然后一个周期结束,滑动窗口。队列只需要维护有可能成为窗口里最大值的元素,同时保证队列里的元素数值是由大到小的。对频率进行排序,使用优先级队列(对外接口只是从队头取元素,从队尾添加元素)。要用小顶堆,因为要统计最大前k个元素,只有弹出,每次是从栈顶弹出。
2023-04-20 14:56:27
121
原创 代码随想录算法训练营DAY 11|20. 有效的括号 1047. 删除字符串中的所有相邻重复项 150. 逆波兰表达式求值
题目链接:https://leetcode.cn/problems/remove-all-adjacent-duplicates-in-string/第三种情况:遍历字符串匹配的过程中,栈已经为空了,没有匹配的字符了,说明右括号没有找到对应的左括号return false。第一种情况:已经遍历完了字符串,但是栈不为空,说明有相应的左括号没有右括号来匹配,所以return false。设定一个栈,存放遍历过的元素,当遍历当前的这个元素的时候,去栈里看一下是不是遍历过相同数值的相邻元素,
2023-04-18 20:55:13
155
原创 代码随想录算法训练营第十天|栈与队列理论基础 232.用栈实现队列 225. 用队列实现栈
栈是以底层容器完成其所有的工作,对外提供统一的接口,底层容器是可插拔的(也就是说我们可以控制使用哪种容器来实现栈的功能)。栈提供push 和 pop 等等接口,所有元素必须符合先进后出规则,所以栈不提供走访功能,也不提供迭代器(iterator)。思路:用两个队列que1和que2实现队列的功能,que2其实完全就是一个备份的作用,把que1最后面的元素以外的元素都备份到que2,然后弹出最后面的元素,再把其他元素从que2导回que1。思路:需要两个栈,一个输入栈,一个输出栈。
2023-04-18 19:35:51
44
原创 代码随想录算法训练营第八天|344.反转字符串 541. 反转字符串II 剑指Offer 05.替换空格 51.翻转字符串里的单词 剑指Offer58-II.左旋转字符串
这部分和27.移除元素 (opens new window)的逻辑是一样的将整个字符串反转将每个单词反转。
2023-04-13 08:46:01
35
原创 代码随想录算法训练营第七天|454.四数相加II 383. 赎金信 15. 三数之和 18. 四数之和
如果nums[i] + nums[left] + nums[right] > 0 就说明 此时三数之和大了,因为数组是排序后了,所以right下标就应该向左移动,这样才能让三数之和小一些。如果 nums[i] + nums[left] + nums[right] < 0 说明 此时 三数之和小了,left 就向右移动,才能让三数之和大一些,直到left与right相遇为止。四个独立的数组,只要找到A[i] + B[j] + C[k] + D[l] = 0就可以,不用考虑有重复的四个元素相加等于0的情况。
2023-04-12 19:45:55
45
原创 代码随想录算法训练营第六天|哈希表理论基础 242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和
哈希表理论基础哈希表是根据关键码的值而直接进行访问的数据结构。哈希表中关键码就是数组的索引下标,然后通过下标直接访问数组中的元素,如下图所示:一般哈希表都是用来快速判断一个元素是否出现集合里。哈希法牺牲了空间换取了时间,因为我们要使用额外的数组,set或者是map来存放数据,才能实现快速的查找。
2023-04-11 17:06:31
106
原创 代码随想录算法训练营第四天|24. 两两交换链表中的节点 19.删除链表的倒数第N个节点 面试题 02.07. 链表相交 142.环形链表II
相遇时: slow指针走过的节点数为: x + y, fast指针走过的节点数:x + y + n (y + z),n为fast指针在环内走了n圈才遇到slow指针, (y+z)为 一圈内节点的个数A。从头结点出发一个指针,从相遇节点 也出发一个指针,这两个指针每次只走一个节点, 那么当这两个指针相遇的时候就是 环形入口的节点。思路:求出两个链表的长度,并求出两个链表长度的差值,然后让curA移动到,和curB 末尾对齐的位置(A是长度较长的链表)卡壳点:找到最长链表,并赋值长的长度。
2023-04-09 17:33:02
127
1
原创 代码随想录算法训练营第三天|203.移除链表元素 ,707.设计链表 ,206.反转链表
题目链接:https://leetcode.cn/problems/remove-linked-list-elements/链表是一种通过指针串联在一起的线性结构,每一个节点由两部分组成,一个是数据与,一个是指针域(存放指向下一节点的指针)。题目链接:https://leetcode.cn/problems/reverse-linked-list/链表是通过指针域的指针链接在内存中各个节点,所以链表中的节点在内存中不是连续分布的。思路:要点:虚拟头节点、当前节点、暂时节点、返回真正的头节点。
2023-04-07 20:33:21
276
1
原创 代码随想录算法训练营第二天|977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II
小结:犯了一个错误,i,j已经定义过了,在for循环中重新定义导致出错,难点就是变量多,在循环过程中如何使用这些变量,循环的限制条件,以及一圈过后有哪些变量需要变化(起始位置,循环中每一条边的长度)。i指向窗口起点,j指向窗口终点;随着j的不断移动,直到窗口内数值之和大于等于目标值,把这时候窗口长度值记录, 然后窗口前端j的位置往后移一位,进行比较,最后得到最小值。题目链接:https://leetcode.cn/problems/squares-of-a-sorted-array/
2023-04-06 21:40:43
268
1
原创 代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素
题目链接:https://leetcode.cn/problems/remove-element/题目链接:https://leetcode.cn/problems/binary-search/思路:有序并且无重复数组查找目标值,可以使用二分法,要注意区间的规定,使用左闭右闭。卡壳点:while(left
2023-04-05 20:13:18
218
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人