- 博客(15)
- 收藏
- 关注
原创 算法训练Day17/构造二叉树
想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉树。合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;否则,不为 null 的节点将直接作为新二叉树的节点。借助前一天学习的根据“中序遍历”与“后序遍历”构造二叉树的思路,进行前序递归地遍历。返回以该节点为根的子树。如果节点不存在,则返回。最大二叉树 可以用下面的算法从。合并过程必须从两个树的根节点开始。给定二叉搜索树(BST)的根节点。返回合并后的二叉树。
2026-02-09 20:42:45
296
原创 算法训练Day16/二叉树
给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历,postorder是同一棵树的后序遍历,请你构造并返回这颗二叉树。思路2:广度优先遍历,但不同于之前先放左节点、再放右节点的层序遍历,而是先放右节点再放左节点,这样遍历的最后一个节点就是最底层最左边的节点。处理左右区间的时候,采用左闭右开。• 第四步:切割中序数组,切成中序左数组和中序右数组 (顺序别搞反了,一定是先切中序数组)使用两种方法,一个是深度优先遍历,一个是广度优先遍历(即层序遍历)。
2026-02-06 17:21:56
298
原创 算法训练Day15/二叉树
给你一棵完全二叉树的根节点 root ,求出该树的节点个数。完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。每处理到一个节点,之后的路径都会以以该节点为末尾的字符为前缀。给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。判断左右子树树高差值后,还要递归判断左右子树是否平衡。给定二叉树的根节点 root ,返回所有左叶子之和。给定一个二叉树,判断它是否是平衡二叉树。
2026-02-02 18:03:21
129
原创 算法训练Day14/二叉树翻转、对称、最大最小深度
如果一个树对称,那么该树的左子树与右子树镜像对称。当两个树镜像对称,那么它们根节点的值相等,此外,其中一棵的左子树与另一棵右子树镜像对称。二叉树的 最大深度是指从根节点到最远叶子节点的最长路径上的节点数。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。使用层序遍历,当遍历到左右节点均为空的节点时,返回当前所在层数。给你一个二叉树的根节点 root , 检查它是否轴对称。说明:叶子节点是指没有子节点的节点。
2026-02-02 11:41:54
218
原创 算法训练Day13/二叉树
观察以上的迭代方法可以发现,不同遍历方式处理方法不同。统一迭代是指用统一的处理模板进行迭代,实现方式是在栈中插入空指针来记录已访问过但没有处理的节点。借助栈来实现,但是要注意入栈顺序。先入右节点,再入左节点,这样才能先弹出左节点,再弹出右节点。与前序遍历处理方式不太相同,因为遍历顺序与处理顺序不一样。直接将层序遍历的结果反转一下。
2026-01-31 18:16:03
212
原创 算法训练Day11/栈与队列
若遇见操作符,则从栈中弹出两个数字,先出栈的是右操作数,后出栈的是左操作数,运算完后将结果压入操作栈,继续遍历直至表达式末尾。给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。输入:tokens = ["4","13","5","/","+"]输入:tokens = ["2","1","+","3","*"]• 有效的算符为 '+'、'-'、'*' 和 '/'。
2026-01-29 17:17:30
284
原创 算法训练Day10/栈与队列
例如,在 "abbaca" 中,我们可以删除 "bb" 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。之后我们得到字符串 "aaca",其中又只有 "aa" 可以执行重复项删除操作,所以最后的字符串为 "ca"。可以使用两个队列实现,也可以使用一个队列实现。请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
2026-01-23 10:23:49
265
原创 算法训练Day9/字符串
给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。给定一个字符串 s 和一个正整数 k,请编写一个函数,将字符串中的后面 k 个字符移到字符串的前面,实现字符串的右旋转操作。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。• 若找到:假设位置为 pos,则 pos 即为 s 的最小周期长度(例如 s = "abab",pos = 2 → 周期为 "ab")。
2026-01-22 21:59:43
337
原创 算法训练Day8/反转字符串&替换数字
给定一个字符串 s,它包含小写字母和数字字符,请编写一个函数,将字符串中的字母字符保持不变,而将每个数字字符替换为number。5.查找子串:find(str, pos):从pos(默认0)开始查找str,返回首次出现的位置,未找到返回string::npos。给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。• 如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。双指针法,逐2k个字符处理。
2026-01-21 15:43:02
63
原创 算法训练Day7/n数之和
给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i!输入:nums1 = [1,2], nums2 = [-2,-1], nums3 = [-1,2], nums4 = [0,2]输出:[[-2,-1,1,2],[-2,0,0,2],[-1,0,0,1]]输入:nums = [1,0,-1,0,-2,2], target = 0。不同的三元组是 [-1,0,1] 和 [-1,-1,2]。输出:[[-1,-1,2],[-1,0,1]]
2026-01-20 20:31:42
530
原创 算法训练Day6/哈希表
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。本题初始思路使用了哈希表,但是由于哈希表的不重复性,导致字符串中重复字符个数的记录不能实现,最终写错。使用unordered_set解题,需要注意的点是,为了防止出现重复,nums2在遍历到与nums1的交集元素后,要将该元素擦除。输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]• 如果这个过程 结果为 1,那么这个数就是快乐数。
2026-01-19 17:01:34
314
原创 算法训练Day4/链表
如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。引入了空头节点,需要注意的点是,如果删除的是原头节点,就不能return head,否则会出现“heap-use-after-free”的问题,而应该return dummyhead->next;给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。递归的终止条件是链表中没有节点,或者链表中只有一个节点,此时无法进行交换。给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。两个方法,哈希表法,快慢指针。
2026-01-18 17:54:43
276
原创 算法训练Day1(补写)
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果 target存在返回下标,否则返回 -1。给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素。• 更改 nums 数组,使 nums 的前 k 个元素包含不等于 val 的元素。nums 的其余元素和 nums 的大小并不重要。给你一个按非递减顺序排序的整数数组 nums,返回每个数字的平方组成的新数组,要求也按非递减顺序 排序。
2026-01-16 21:15:52
72
原创 算法训练Day3
• void addAtIndex(int index, int val) 将一个值为 val 的节点插入到链表中下标为 index 的节点之前。给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回新的头节点。• int get(int index) 获取链表中下标为 index 的节点的值。• void addAtTail(int val) 将一个值为 val 的节点追加到链表中作为链表的最后一个元素。
2026-01-16 13:38:40
337
原创 算法训练Day2
其次,该思想的另外一个重要突破点是,如果同一个数组头的所有子数组,已经找到一个sum>target的数组后,剩余的长度比该数组长的数组就不必再记录和判断,因为一定不满足题意。本题关键是对滑动数组头的理解,它并不是使用双层循环中的一层进行,而是用标记的方法,直接加在sum中。第一行输入为整数数组 Array 的长度 n,接下来 n 行,每行一个整数,表示数组的元素。在一个城市区域内,被划分成了n * m个连续的区块,每个区块都拥有不同的权值,代表着其土地价值。接下来的 n 行,每行输出 m 个正整数。
2026-01-15 16:41:41
43
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅