算法
文章平均质量分 95
yzd111
努力成为练习一坤年的初级程序员
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
LeetCode 145 二叉树的后序遍历
我们在前序遍历中得到的是根左右的顺序,因此我们先将左右的顺序互换,也就是在循环中先放入左子节点,再放入右子节点,这样就会得到根右左的顺序结果,最后再将数组顺序反转就会得到按照后序遍历得到的左右根顺序。该方法与前面的前序遍历类似,仅仅需要改动一些代码顺序即可。该方法在此不作阐述,参考力扣第。,返回其节点值的 后序遍历。给你一棵二叉树的根节点。题的前序遍历思路即可。原创 2024-08-26 21:36:13 · 487 阅读 · 0 评论 -
LeetCode 94 二叉树的中序遍历
在之前的操作中我们都是遍历到那个节点就将该节点从栈中取出,因此我们对于每个节点的访问和操作是一致的。但是在这次的中序遍历中我们并非是访问到那个节点就对那个节点进行操作,而是先一直访问到最左侧的叶节点,然后对其进行操作。的节点,但是我们首先访问到的节点确是根节点,因此我们需要一个指针指向我们当前访问的节点,并且使用判断是否到了最低端然后进行操作。根据中序遍历的顺序,访问了左节点和根节点,接下来需要访问右节点,也就是使。当指针指到底部时,我们其中的栈顶元素也就是当前节点的值放到数组中。题的前序遍历思路即可。原创 2024-08-26 21:33:36 · 1063 阅读 · 0 评论 -
LeetCode 144 二叉树的前序遍历
我们首先需要想到递归的实现原理,递归的过程中每一次调用将函数的局部变量,参数值和返回地址等压入栈中,在调用结束时从栈顶弹出上次递归的各项参数和值。按照前序遍历的顺序,对根节点进行操作,将其弹出栈放入数组中,同时将其子节点按照右子节点,左子节点的顺序进行入栈操作。之所以按照先右后左的顺序是因为栈是先入后出的,因此在后面出栈的时候就成了根左右的顺序了。在这个递归中需要访问每个节点一遍,因此当前的节点是参数之一,同时需要在每次递归开始时访问当前字子树的根节点,因此需要传入一个数组保存当前被访问结点的值。原创 2024-08-26 21:24:01 · 834 阅读 · 0 评论 -
LCR 150 逆波兰表达式求值
中缀表达式的计算需要两个栈的辅助,一个在中缀表达式转换成后缀表达式中用来存储运算符,另一个在转换完的后缀表达式的运算中用来存储操作数。后缀表达式计算的方式其实很简单,从左向右依次读取,遇到运算数就放入中缀表达式中,遇到操作符就将其前面的两个运算数进行计算。在最后全部读取完成的时候,我们将栈中的操作符依次弹出,最后得到的结果与上面手算的相同。最后我们可以得到上面的结果,按照左优先原则得到的结果的运算符也是按照从小到大顺序的。,我们按照左优先的原则,如果两个运算符同级,那么左侧的运算符进行优先运算。原创 2024-08-26 21:22:21 · 1063 阅读 · 0 评论 -
LeetCode 203 移除链表元素
首先删除第一个节点以外的其余节点,最后判断第一个节点是否是需要删除的节点,如果是我们就返回。, 使其指向给定的第一个节点,因为第一个节点也有可能是需要删除的节点,因此我们需要创建一个虚拟的头节点来指向它。如果需要删除,我们就将该节点的下一个节点作为返回值返回给上一个节点的指向。值,假设最后要处理的头节点为要删除的节点,我们直接将它的下一个节点作为结果返回。如上图所示,我们将节点值为 5 的节点的。,接着我们开始向后移动直到头节点为空。的节点作为该链表的第一个节点进行返回。的节点,并返回 新的头节点。原创 2024-08-26 21:20:18 · 544 阅读 · 0 评论 -
动态规划08-记忆化搜索
给定一个R行C列的矩阵,表示一个矩形网格滑雪场。矩阵中第i行第j列的点表示滑雪场的第i行第j列区域的高度。一个人从滑雪场中的某个区域内出发,每次可以向上下左右任意一个方向滑动一个单位距离。当然,一个人能够滑动到某相邻区域的前提是该区域的高度低于自己目前所在区域的高度。下面给出一个矩阵作为例子:在给定矩阵中,一条可行的滑行轨迹为24−17−2−1。在给定矩阵中,最长的滑行轨迹为25−24−23−−3−2−1,沿途共经过25个区域。原创 2024-08-24 20:07:54 · 759 阅读 · 0 评论 -
动态规划07-树形 DP
树形DP一般思路,从分析子树入手,最优解通常是和子树根节点u相关的函数,状态计算就是寻找根节点和子节点以及权边的递推关系。编写代码,通常需要dfs,从根到叶,再从叶到根,在合适的时候DP。原创 2024-08-24 20:07:09 · 790 阅读 · 0 评论 -
动态规划06-状态压缩 DP
关于状态压缩的解释,参考这一篇文章。原创 2024-08-24 20:00:00 · 1101 阅读 · 0 评论 -
动态规划05-数位统计类 DP
给定两个整数a和b,求a和b之间的所有数字中0∼9的出现次数。例如,a1024b1032,则a和b之间共有9个数102410251026102710281029103010311032其中0出现10次,1出现10次,2出现7次,3出现3次等等…输入包含多组测试数据。每组测试数据占一行,包含两个整数a和b。当读入一行为00时,表示输入终止,且该行不作处理。每组数据输出一个结果,每个结果占一行。原创 2024-08-24 19:56:20 · 1097 阅读 · 0 评论 -
动态规划04-计数类 DP
一个正整数nnn1n2nk,其中n1≥n2≥≥nkk≥1。我们将这样的一种表示称为正整数n的一种划分。现在给定一个正整数n,请你求出n共有多少种不同的划分方法。共一行,包含一个整数n。共一行,包含一个整数,表示总划分数量。由于答案可能很大,输出结果请对1097取模。1≤n≤100057。原创 2024-08-24 19:55:44 · 834 阅读 · 0 评论 -
动态规划03-区间 DP
设有N堆石子排成一排,其编号为123N。每堆石子有一定的质量,可以用一个整数来描述,现在要将这N堆石子合并成为一堆。每次只能合并相邻的两堆,合并的代价为这两堆石子的质量之和,合并后与这两堆石子相邻的石子将和新堆相邻,合并时由于选择的顺序不同,合并的总代价也不相同。例如有4堆石子分别为 1 3 5 2, 我们可以先合并12堆,代价为4,得到 4 5 2, 又合并12堆,代价为9,得到 9 2 ,再合并得到11,总代价为491124;如果第二步是先合并23。原创 2024-08-24 19:50:31 · 1126 阅读 · 0 评论 -
动态规划02-线性 DP
给定一个如下图所示的数字三角形,从顶部出发,在每一结点可以选择移动至其左下方的结点或移动至其右下方的结点,一直走到底层,要求找出一条路径,使路径上的数字的和最大。73 88 1 0第一行包含整数n,表示数字三角形的层数。接下来n行,每行包含若干整数,其中第i行表示数字三角形第i层包含的整数。输出一个整数,表示最大的路径数字和。1≤n≤500−10000≤三角形中的整数≤10000573 88 1 02 7 4 44 5 2 6 530。原创 2024-08-24 19:49:07 · 643 阅读 · 0 评论 -
动态规划01-背包问题
有N件物品和一个容量是V的背包。每件物品只能使用一次。第i件物品的体积是Vi,价值是Wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。第一行两个整数NV,用空格隔开,分别表示物品数量和背包容积。接下来有N行,每行两个整数ViWi,用空格隔开,分别表示第i件物品的体积和价值。输出一个整数,表示最大价值。原创 2024-08-24 19:48:25 · 2593 阅读 · 0 评论 -
数学知识:筛素数
给定一个正整数n,请你求出1n中质数的个数。共一行,包含整数n。共一行,包含一个整数,表示1n中质数的个数。1<=n<=106。原创 2024-03-19 13:42:50 · 1084 阅读 · 0 评论 -
LeetCode 28 找出字符串中第一个匹配项的下标
字符串匹配的kmp算法原创 2023-11-30 22:12:21 · 1201 阅读 · 1 评论
分享