栈
小马哥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 · 304 阅读 · 0 评论 -
【两次过】Lintcode 229. 栈排序
请设计一种方法将一个栈进行升序排列 (最大的数在最上面)。你可以使用另外一个栈来辅助操作,但不可将这些数复制到另外一个数据结构中 (如,数组)。样例给一个栈:| ||3||1||2||4| -排序之后:| ||4||3||2||1| -栈会被序列化为[4,2,1,3],也就是说最右边是栈顶。注意事项时间复杂度为O(n^2)的算法也可以...原创 2019-04-22 21:14:24 · 213 阅读 · 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 · 279 阅读 · 0 评论 -
【两次过】栈的压入、弹出序列
题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)解题思路1:观察到这样一个规律,先在入栈序列中找到出栈序列的第一个元素,找不到...原创 2019-04-21 09:41:28 · 200 阅读 · 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 · 136 阅读 · 0 评论 -
【三次过】Lintcode 421. 简化路径
给定一个文件的绝对路径(Unix-style),请进行路径简化。Unix中,.表示当前目录,..表示父目录。结果必须以/开头,并且两个目录名之间有且只有一个/。最后一个目录名(如果存在)后不能出现/。你需要保证结果是正确表示路径的最短的字符串。样例样例 1:输入: "/home/"输出: "/home"样例 2:输入: "/a/./../../...原创 2019-04-11 22:05:00 · 181 阅读 · 0 评论 -
【一次过】Lincode 424. 逆波兰表达式求值
求逆波兰表达式的值。在逆波兰表达法中,其有效的运算符号包括+,-,*,/。每个运算对象可以是整数,也可以是另一个逆波兰计数表达。样例["2", "1", "+", "3", "*"] -> ((2 + 1) * 3) -> 9["4", "13", "5", "/", "+"] -> (4 + (13 / 5)) -> 6解题思路:...原创 2018-07-14 22:00:19 · 117 阅读 · 0 评论 -
【一次过】Lintcode 423:有效的括号序列
给定一个字符串所表示的括号序列,包含以下字符:'(', ')','{','}','['and']', 判定是否是有效的括号序列。样例括号必须依照"()"顺序表示,"()[]{}"是有效的括号,但"([)]"则是无效的括号。解题思路: 先利用map建立左括号与右括号的映射关系利用栈的思想,当栈为空或遇到左括号,压入栈中;否则,判断栈顶的元素是否是...原创 2018-06-18 16:38:22 · 296 阅读 · 0 评论 -
【一次过】Lintcode 494. 双队列实现栈
利用两个队列来实现一个栈的功能样例例1:输入:push(1)pop()push(2)isEmpty() // return falsetop() // return 2pop()isEmpty() // return true例2:输入:isEmpty()解题思路:q1是专职进出栈的,q2只是个中转站入栈:直接入队列q1即可 出栈:把q1...原创 2019-02-12 16:51:44 · 418 阅读 · 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 · 120 阅读 · 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 · 204 阅读 · 0 评论