栈
文章平均质量分 73
算法#栈
李牧九丶
奉己为神
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
从零学算法71
本文介绍了如何简化Unix风格的绝对路径字符串。核心规则包括:处理"."(当前目录)、".."(上级目录)和连续斜杠,最终返回规范路径。解题思路是使用栈来模拟路径访问:1)按斜杠分割路径;2)遍历时忽略"."和空内容;3)遇到".."弹出栈顶(返回上级);4)其他情况压入栈(进入下级)。示例代码展示了JavaScript实现,通过split、pop和push操作完成路径简化,最后用join拼接结果。该算法能正确处理各种边界情况,原创 2025-10-22 16:33:30 · 227 阅读 · 0 评论 -
从零学算法1717
本文提出了一种贪心算法来解决字符串删除子串获得最大得分的问题。算法通过比较两种操作(删除"ab"或"ba")的得分,优先处理得分更高的操作。具体步骤包括:1)调整参数使x始终为更高得分;2)将字符串分割为仅含a和b的连续子串;3)使用栈的思想统计"ab"和"ba"子串的数量,其中"ab"通过栈匹配计算,"ba"通过剩余字符的最小值计算。最终将各子串得分相加得到最大总得分。该方法高效处理了大原创 2025-10-20 15:11:09 · 280 阅读 · 0 评论 -
从零学算法32
本文介绍了求解最长有效括号子串的三种方法:栈、动态规划和贪心。栈方法通过维护未匹配右括号的下标边界来计算有效长度;动态规划利用状态转移方程处理不同括号情况;贪心算法通过双向遍历统计左右括号数来获取最大有效长度。三种方法时间复杂度均为O(n),空间复杂度栈和动态规划为O(n),贪心为O(1)。动态规划需处理边界条件,而贪心需两次遍历以防遗漏左括号过多的情况。原创 2025-09-16 09:05:37 · 419 阅读 · 0 评论 -
从零学算法227
你可以假设给定的表达式总是有效的。所有中间结果将在 [-231, 231 - 1] 的范围内。注意:不允许使用任何将字符串作为数学表达式计算的内置函数,比如 eval()。.给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。表达式中的所有整数都是非负整数,且在范围 [0, 2。s 由整数和算符 (‘+’, ‘-’, '', ‘/’) 组成,中间由一些空格隔开。输入:s = " 3+5 / 2 "输入:s = " 3/2 "整数除法仅保留整数部分。输入:s = "3+2。原创 2024-03-19 11:38:34 · 1035 阅读 · 0 评论 -
从零学算法946
给定 pushed 和 popped 两个序列,每个序列中的 值都不重复,只有当它们可能是在最初空栈上进行的推入 push 和弹出 pop 操作序列的结果时,返回 true;否则,返回 false。输入:pushed = [1,2,3,4,5], popped = [4,5,3,2,1]输入:pushed = [1,2,3,4,5], popped = [4,3,5,1,2]解释:1 不能在 2 之前弹出。原创 2023-10-11 13:53:57 · 216 阅读 · 0 评论 -
从零学算法394
编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入。输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。输入:s = “2[abc]3[cd]ef”输入:s = “abc3[cd]xyz”输出:“abcabccdcdcdef”输入:s = “3[a]2[bc]”输入:s = “3[a2[c]]”原创 2023-07-14 17:48:34 · 425 阅读 · 0 评论 -
从零学算法232
你 只能 使用标准的栈操作 —— 也就是只有 push to top, peek/pop from top, size, 和 is empty 操作是合法的。232.请你仅使用两个栈实现先入先出队列。你所使用的语言也许不支持栈。你可以使用 list 或者 deque(双端队列)来模拟一个栈,只要是标准的栈操作即可。否则,返回 false。void push(int x) 将元素 x 推到队列的末尾。int pop() 从队列的开头移除并返回元素。int peek() 返回队列开头的元素。原创 2023-07-12 17:45:55 · 526 阅读 · 0 评论 -
从零学算法133
图中的每个节点都包含它的值 val(int) 和其邻居的列表(list[Node])。输入:adjList = [[2,4],[1,3],[2,4],[1,3]]输出:[[2,4],[1,3],[2,4],[1,3]]节点 1 的值是 1,它有两个邻居:节点 2 和 4。节点 2 的值是 2,它有两个邻居:节点 1 和 3。节点 3 的值是 3,它有两个邻居:节点 2 和 4。节点 4 的值是 4,它有两个邻居:节点 1 和 3。输入:adjList = [[2],[1]]输出:[[2],[1]]原创 2023-07-10 17:01:24 · 296 阅读 · 0 评论 -
从零学算法20
20.给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。每个右括号都有一个对应的相同类型的左括号。左括号必须用相同类型的右括号闭合。输入:s = “()[]{}”左括号必须以正确的顺序闭合。输入:s = “()”输入:s = “(]”原创 2023-07-10 13:52:54 · 220 阅读 · 0 评论 -
从零学算法150
tokens[i] 是一个算符(“+”、“-”、“*” 或 “/”),或是在范围 [-200, 200] 内的一个整数。输入:tokens = [“10”,“6”,“9”,“3”,”+“,”-11",“该算式的逆波兰表达式写法为 ( ( 1 2 + ) ( 3 4 + ) * )。解释:该算式转化为常见的中缀算术表达式为:((2 + 1) * 3) = 9。输入:tokens = [“4”,“13”,“5”,”/“,”+“]输入:tokens = [“2”,“1”,“+”,“3”,"原创 2023-07-10 11:39:25 · 153 阅读 · 0 评论 -
从零学算法739
给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。输入: temperatures = [73,74,75,71,69,72,76,73]输入: temperatures = [30,40,50,60]输入: temperatures = [30,60,90]输出: [1,1,4,2,1,1,0,0]输出: [1,1,1,0]输出: [1,1,0]原创 2023-07-10 11:23:50 · 311 阅读 · 0 评论 -
从零学算法155
设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。--> 返回 -3.minStack.getMin();--> 返回 -2.void push(int val) 将元素val推入堆栈。int getMin() 获取堆栈中的最小元素。void pop() 删除堆栈顶部的元素。int top() 获取堆栈顶部的元素。MinStack() 初始化堆栈对象。原创 2023-07-07 17:44:33 · 252 阅读 · 0 评论
分享