
栈
hestyle
戎码一生!
展开
-
LeetCode 132模式(单调栈)
给定一个整数序列:a1, a2, …, an,一个132模式的子序列 ai, aj, ak 被定义为:当 i < j < k 时,ai < ak < aj。设计一个算法,当给定有 n 个数字的序列时,验证这个序列中是否含有132模式的子序列。注意:n 的值小于15000。示例1:输入: [1, 2, 3, 4]输出: False解释: 序列中不存在132模式的子序...原创 2019-03-29 19:17:24 · 672 阅读 · 0 评论 -
LeetCode N叉树的后序遍历(递归、递推)
给定一个 N 叉树,返回其节点值的后序遍历。例如,给定一个 3叉树 :返回其后序遍历: [5,6,3,2,4,1].说明: 递归法很简单,你可以使用迭代法完成此题吗?思路分析: N叉树的后序遍历与二叉树的后序遍历思路一样,先访问子节点,再访问根节点。请先翻阅 LeetCode 二叉树的后序遍历(递归、递推)方法一:递归法。/*// Definition for a Node.c...原创 2019-04-14 15:39:05 · 876 阅读 · 0 评论 -
LeetCode 标签验证器(辅助stack)
给定一个表示代码片段的字符串,你需要实现一个验证器来解析这段代码,并返回它是否合法。合法的代码片段需要遵守以下的所有规则:代码必须被合法的闭合标签包围。否则,代码是无效的。闭合标签(不一定合法)要严格符合格式:<TAG_NAME>TAG_CONTENT</TAG_NAME>。其中,<TAG_NAME>是起始标签,</TAG_NAME>是结束标签...原创 2019-04-14 17:22:47 · 557 阅读 · 0 评论 -
LeetCode 每日温度(递减栈)
根据每日 气温 列表,请重新生成一个列表,对应位置的输入是你需要再等待多久温度才会升高的天数。如果之后都不会升高,请输入 0 来代替。例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。提示:气温 列表长度的范围是 [1, 30000]。每个气温的值的都是 [30,...原创 2019-05-02 14:47:43 · 537 阅读 · 0 评论 -
LeetCode 行星碰撞(栈)
给定一个整数数组 asteroids,表示在同一行的行星。对于数组中的每一个元素,其绝对值表示行星的大小,正负表示行星的移动方向(正表示向右移动,负表示向左移动)。每一颗行星以相同的速度移动。找出碰撞后剩下的所有行星。碰撞规则:两个行星相互碰撞,较小的行星会爆炸。如果两颗行星大小相同,则两颗行星都会爆炸。两颗移动方向相同的行星,永远不会发生碰撞。示例 1:输入: asteroids = ...原创 2019-05-01 14:49:52 · 1698 阅读 · 0 评论 -
LeetCode 二叉搜索树结点最小距离(中序遍历)
给定一个二叉搜索树的根结点 root, 返回树中任意两节点的差的最小值。示例:输入: root = [4,2,6,1,3,null,null]输出: 1解释:注意,root是树结点对象(TreeNode object),而不是数组。给定的树 [4,2,6,1,3,null,null] 可表示为下图: 4 / \ 2 6 ...原创 2019-05-11 10:03:56 · 1051 阅读 · 0 评论 -
LeetCode 股票价格跨度
编写一个 StockSpanner 类,它收集某些股票的每日报价,并返回该股票当日价格的跨度。今天股票价格的跨度被定义为股票价格小于或等于今天价格的最大连续日数(从今天开始往回数,包括今天)。例如,如果未来7天股票的价格是 [100, 80, 60, 70, 60, 75, 85],那么股票跨度将是 [1, 1, 1, 2, 1, 4, 6]。示例:输入:["StockSpanner","...原创 2019-06-19 08:05:01 · 457 阅读 · 0 评论 -
LeetCode 最大频率栈(hash表+stack、优先队列)
实现 FreqStack,模拟类似栈的数据结构的操作的一个类。FreqStack 有两个函数:push(int x),将整数 x 推入栈中。pop(),它移除并返回栈中出现最频繁的元素。如果最频繁的元素不只一个,则移除并返回最接近栈顶的元素。示例:输入:["FreqStack","push","push","push","push","push","push","pop","pop...原创 2019-06-16 15:07:55 · 917 阅读 · 0 评论 -
LeetCode 使括号有效的最少添加(栈)
给定一个由 ‘(’ 和 ‘)’ 括号组成的字符串 S,我们需要添加最少的括号( ‘(’ 或是 ‘)’,可以在任何位置),以使得到的括号字符串有效。从形式上讲,只有满足下面几点之一,括号字符串才是有效的:它是一个空字符串,或者它可以被写成 AB (A 与 B 连接), 其中 A 和 B 都是有效字符串,或者它可以被写作 (A),其中 A 是有效字符串。给定一个括号字符串,返回为使结果字符...原创 2019-07-07 20:44:56 · 456 阅读 · 0 评论 -
LeetCode N叉树的前序遍历(递归、递推)
给定一个 N 叉树,返回其节点值的前序遍历。例如,给定一个 3叉树 :返回其前序遍历: [1,3,5,6,2,4]。说明: 递归法很简单,你可以使用迭代法完成此题吗?思路分析: 和二叉树的前序遍历思想一致,先访问根节点,在访问子节点。请先翻阅 LeetCode 二叉树的前序遍历(递归、递推)/*// Definition for a Node.class Node {publi...原创 2019-04-14 15:17:59 · 421 阅读 · 0 评论 -
LeetCode 最短无序连续子数组
给定一个整数数组,你需要寻找一个连续的子数组,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。你找到的子数组应是最短的,请输出它的长度。示例 1:输入: [2, 6, 4, 8, 10, 9, 15]输出: 5解释: 你只需要对 [6, 4, 8, 10, 9] 进行升序排序,那么整个表都会变为升序排序。说明 :输入的数组长度范围在 [1, 10,000]。输入的数组...原创 2019-04-13 16:38:36 · 582 阅读 · 0 评论 -
LeetCode 有效的括号(辅助栈)
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: “()”输出: true示例 2:输入: “()[]{}”输出: true示例 3:输入: “(]”输出: false示例 4:输入: “([)...原创 2019-01-10 17:04:33 · 286 阅读 · 0 评论 -
LeetCode 最长的有效括号(栈、动态规划)
给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。示例 1:输入: “(()”输出: 2解释: 最长有效括号子串为 “()”示例 2:输入: “)()())”输出: 4解释: 最长有效括号子串为 “()()”思路分析:刚开始拿到这道题,我想起了之前做过的括号匹配问题,使用栈来进行辅助求解。使用一个指针,从前往后进行扫描,如果是左括号,直接放入栈中,...原创 2019-02-05 11:39:18 · 700 阅读 · 1 评论 -
LeetCode 两数相加II(栈辅助)
给定两个非空链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储单个数字。将这两数相加会返回一个新的链表。你可以假设除了数字 0 之外,这两个数字都不会以零开头。进阶:如果输入链表不能修改该如何处理?换句话说,你不能对列表中的节点进行翻转。示例:输入: (7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4)输出: 7 -&...原创 2019-03-26 17:23:10 · 273 阅读 · 0 评论 -
LeetCode 下一个更大元素I(hash表、栈)
给定两个没有重复元素的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集。找到 nums1 中每个元素在 nums2 中的下一个比其大的值。nums1 中数字 x 的下一个更大元素是指 x 在 nums2 中对应位置的右边的第一个比 x 大的元素。如果不存在,对应位置输出-1。示例 1:输入: nums1 = [4,1,2], nums2 = [1,3,4,2].输...原创 2019-04-05 17:00:23 · 256 阅读 · 0 评论 -
LeetCode 柱状图中最大的矩形
给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为 [2,1,5,6,2,3]。图中阴影部分为所能勾勒出的最大矩形面积,其面积为 10 个单位。示例:输入: [2,1,5,6,2,3]输出: 10思路分析:采取“双指针窗口滑动”的算法,使...原创 2019-02-16 11:37:06 · 33182 阅读 · 0 评论 -
LeetCode 把二叉搜索树转换为累加树(逆中序遍历)
给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree),使得每个节点的值是原来的节点值加上所有大于它的节点值之和。例如:输入: 二叉搜索树: 5 / \ 2 13输出: 转换为累加树: 18 / \ ...原创 2019-04-09 14:48:08 · 472 阅读 · 0 评论 -
LeetCode 函数的独占时间(辅助stack)
给出一个非抢占单线程CPU的 n 个函数运行日志,找到函数的独占时间。每个函数都有一个唯一的 Id,从 0 到 n-1,函数可能会递归调用或者被其他函数调用。日志是具有以下格式的字符串:function_id:start_or_end:timestamp。例如:“0:start:0” 表示函数 0 从 0 时刻开始运行。“0: end :0” 表示函数 0 在 0 时刻结束。函数的独占时间定...原创 2019-04-16 17:02:29 · 644 阅读 · 0 评论 -
LeetCode 有效的括号字符串(辅助stack)
给定一个只包含三种字符的字符串:( ,) 和 * ,写一个函数来检验这个字符串是否为有效字符串。有效字符串具有如下规则:任何左括号 ( 必须有相应的右括号 )。任何右括号 ) 必须有相应的左括号 ( 。左括号 ( 必须在对应的右括号之前 )。可以被视为单个右括号 ) ,或单个左括号 ( ,或一个空字符串。一个空字符串也被视为有效字符串。示例 1:输入: "()"输出: True...原创 2019-04-20 21:04:19 · 483 阅读 · 0 评论 -
LeetCode k个一组翻转链表(辅助栈)
给出一个链表,每 k 个节点一组进行翻转,并返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么将最后剩余节点保持原有顺序。示例 :给定这个链表:1->2->3->4->5当 k = 2 时,应当返回: 2->1->4->3->5当 k = 3 时,应当返回: 3->2->1-&g...原创 2019-01-25 13:52:24 · 370 阅读 · 0 评论