栈
小马哥MAX
刷题记录BLOG
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【三次过】Lintcode 575. 字符串解码
给出一个表达式s,此表达式包括数字,字母以及方括号。在方括号前的数字表示方括号内容的重复次数(括号内的内容可以是字符串或另一个表达式),请将这个表达式展开成一个字符串。 样例 样例1 输入: S = abc3[a] 输出: "abcaaa" 样例2 输入: S = 3[2[ad]3[pf]]xyz 输出: "adadpfpfpfadadpfpfpfadadpfpfpfxyz" ...原创 2019-04-11 09:57:08 · 344 阅读 · 0 评论 -
【两次过】Lintcode 229. 栈排序
请设计一种方法将一个栈进行升序排列 (最大的数在最上面)。 你可以使用另外一个栈来辅助操作,但不可将这些数复制到另外一个数据结构中 (如,数组)。 样例 给一个栈: | | |3| |1| |2| |4| - 排序之后: | | |4| |3| |2| |1| - 栈会被序列化为[4,2,1,3],也就是说最右边是栈顶。 注意事项 时间复杂度为O(n^2)的算法也可以...原创 2019-04-22 21:14:24 · 259 阅读 · 0 评论 -
【一次过】Lintcode 12 :带最小值操作的栈
实现一个栈, 支持以下操作: push(val)将 val 压入栈 pop()将栈顶元素弹出, 并返回这个弹出的元素 min()返回栈中元素的最小值 要求 O(1) 开销. 样例 样例 2: 输入: push(1) min() push(2) min() push(3) min() 输出: 1 1 1 注意事项 保证栈中没有数...原创 2018-05-28 13:49:19 · 324 阅读 · 0 评论 -
【两次过】栈的压入、弹出序列
题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的) 解题思路1: 观察到这样一个规律,先在入栈序列中找到出栈序列的第一个元素,找不到...原创 2019-04-21 09:41:28 · 254 阅读 · 0 评论 -
【一次过】【PriorityQueue】【2017好未来】n个数里最小的k个
找出n个数里最小的k个 输入描述: 每个测试输入包含空格分割的n+1个整数,最后一个整数为k值,n 不超过100。 输出描述: 输出n个整数里最小的k个数。升序输出 示例1 输入 3 9 6 8 -10 7 -11 19 30 12 23 5 输出 -11 -10 3 6 7 解题思路: 使用Priority即可。为了保证更高的拓展性,本题采用固定大小的最大堆堆进...原创 2019-04-15 22:01:44 · 171 阅读 · 0 评论 -
【三次过】Lintcode 421. 简化路径
给定一个文件的绝对路径(Unix-style),请进行路径简化。 Unix中,.表示当前目录,..表示父目录。 结果必须以/开头,并且两个目录名之间有且只有一个/。最后一个目录名(如果存在)后不能出现/。你需要保证结果是正确表示路径的最短的字符串。 样例 样例 1: 输入: "/home/" 输出: "/home" 样例 2: 输入: "/a/./../../...原创 2019-04-11 22:05:00 · 210 阅读 · 0 评论 -
【一次过】Lincode 424. 逆波兰表达式求值
求逆波兰表达式的值。 在逆波兰表达法中,其有效的运算符号包括+,-,*,/。每个运算对象可以是整数,也可以是另一个逆波兰计数表达。 样例 ["2", "1", "+", "3", "*"] -> ((2 + 1) * 3) -> 9 ["4", "13", "5", "/", "+"] -> (4 + (13 / 5)) -> 6 解题思路: ...原创 2018-07-14 22:00:19 · 138 阅读 · 0 评论 -
【一次过】Lintcode 423:有效的括号序列
给定一个字符串所表示的括号序列,包含以下字符:'(', ')','{','}','['and']', 判定是否是有效的括号序列。 样例 括号必须依照"()"顺序表示,"()[]{}"是有效的括号,但"([)]"则是无效的括号。 解题思路: 先利用map建立左括号与右括号的映射关系 利用栈的思想,当栈为空或遇到左括号,压入栈中;否则,判断栈顶的元素是否是...原创 2018-06-18 16:38:22 · 339 阅读 · 0 评论 -
【一次过】Lintcode 494. 双队列实现栈
利用两个队列来实现一个栈的功能 样例 例1: 输入: push(1) pop() push(2) isEmpty() // return false top() // return 2 pop() isEmpty() // return true 例2: 输入: isEmpty() 解题思路: q1是专职进出栈的,q2只是个中转站 入栈:直接入队列q1即可 出栈:把q1...原创 2019-02-12 16:51:44 · 467 阅读 · 0 评论 -
【一次过】Lintcode 40. 用栈实现队列
正如标题所述,你需要使用两个栈来实现队列的一些操作。 队列应支持push(element),pop() 和 top(),其中pop是弹出队列中的第一个(最前面的)元素。 pop和top方法都应该返回第一个元素的值。 样例 比如push(1), pop(), push(2), push(3), top(), pop(),你应该返回1,2和2 挑战 仅使用两个栈来实现它,不使用任何其他数据...原创 2018-08-13 19:25:21 · 150 阅读 · 0 评论 -
【三次过】Lintcode 363. 接雨水
给出n个非负整数,代表一张X轴上每个区域宽度为1的海拔图, 计算这个海拔图最多能接住多少(面积)雨水。 样例 样例 1: 输入: [0,1,0] 输出: 0 样例 2: 输入: [0,1,0,2,1,0,1,3,2,1,2,1] 输出: 6 挑战 O(n) 时间, O(1) 空间 O(n) 时间, O(n) 空间也可以接受 解题思路: 这道题还可以用单调栈的...原创 2019-06-30 21:19:55 · 248 阅读 · 0 评论
分享