
算法
以数据结构为基础,掌握算法的基本原理并加以运用处理实际问题
moodfriend
这个作者很懒,什么都没留下…
展开
-
最小路径和问题
从题目来看,每一步只能移动到下一行中相邻的结点,所以从第二行开始,找到当前行的最小值,设为dp[i][j],当前行的元素分为三种情况,第一种元素在行开头,此时该行只能由上一行行开头元素相加得到,第二种元素在行末尾,元素只能由上一行行末尾元素相加得到,剩余情况都可以由上一行的两种方式得到,所以我们将情况分为三种,得到每一行相加的所有情况,最终取最小值即可得到结果。自顶向下的最小路径和为 11(即,2 + 3 + 5 + 1 = 11)。那么下一步可以移动到下一行的下标,找出自顶向下的最小路径和。原创 2022-10-25 20:50:58 · 150 阅读 · 0 评论 -
括号匹配问题
栈核心思想是后进先出(LIFO),利用栈这种特性处理括号。从左到右处理括号时,最右边的无匹配左括号,必须与接下来遇到的第一个右括号相匹配,并且,在第一个位置的左括号可能要等到处理至最后一个位置的右括号时才能完成匹配。思路分析:多类型括号匹配问题的思路与普通的括号匹配问题是一样的,是在普通的基础上新增了多个类型,本质是一样的,都是利用栈的思想对括号进行匹配,在前一个问题的基础上加上了判断括号类型是否匹配。从左到右读取一个括号串,然后判断其中的括号是否匹配。下面的这些括号则是不匹配的。下面是正确匹配的括号串。原创 2022-10-23 19:32:48 · 506 阅读 · 0 评论 -
十进制转换问题
【代码】十进制转换问题。原创 2022-10-24 08:04:19 · 256 阅读 · 0 评论 -
回文串问题
如何判定一个字符串是回文串,可以根据回文串正读反读都一致的特性来判断,这一特性我们可以联想到双端队列这种数据结构。双端队列可以双向进出,我们只需要把字符串放入队列,每次从两端各出队一次,判断出队元素是否一致即可判断此字符串是否是回文串。回文串是正读和反读都一样的字符串,例如“123321”,“45654”。原创 2022-10-24 13:23:26 · 705 阅读 · 0 评论 -
前序、中序和后序表达式转换问题
以A + B * C为例,操作数 A 、B 和 C 的相对位置保持不变,只有运算符改变了位置。再观察中序表达式中的运算符。但是在后序表达式中,由于 * 的优先级更高(写成完全括号表达式后乘法所在的括号先进行运算),因此 * 先于 + 出现,前序表达式与后序表达式相反。答案是,这两种表达式中的运算符所对应的操作数是明确的。从这个表格中可以看到中序表达式和前序表达式、后序表达式的区别,中序表达式有括号,前序和后序没有括号。(1)反转输入字符串,如“(A+B)*(C+D)” 反转后为“(D+C)*(B+A)”。原创 2022-10-24 10:45:22 · 1210 阅读 · 0 评论