
栈
Betternw
这个作者很懒,什么都没留下…
展开
-
表达式求值
题目描述请写一个整数计算器,支持加减乘三种运算和括号。示例1:输入:“1+2”返回值:3实例2:输入:“3+234-1”返回值:26分析对于「任何表达式」而言,我们都使用两个栈 nums 和 ops:nums : 存放所有的数字ops :存放所有的数字以外的操作然后从前往后做,对遍历到的字符做分情况讨论:空格 : 跳过( : 直接加入 ops 中,等待与之匹配的 )) : 使用现有的 nums 和 ops 进行计算,直到遇到左边最近的一个左括号为止,计算结果放到 nums原创 2021-08-01 15:01:09 · 120 阅读 · 0 评论 -
151 翻转字符串里的单词
题目描述给你一个字符串 s ,逐个翻转字符串中的所有 单词 。单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。请你返回一个翻转 s 中单词顺序并用单个空格相连的字符串。说明:输入字符串 s 可以在前面、后面或者单词间包含多余的空格。翻转后单词间应当仅用一个空格分隔。翻转后的字符串中不应包含额外的空格。示例 1:输入:s = “the sky is blue”输出:“blue is sky the”分析去掉首尾空格当前单词不为空时,连接到word原创 2021-07-07 10:34:33 · 73 阅读 · 0 评论 -
232 用栈实现队列
题目描述请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):实现 MyQueue 类:void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek() 返回队列开头的元素boolean empty() 如果队列为空,返回 true ;否则,返回 false说明:你只能使用标准的栈操作 —— 也就是只有 push to top, peek/pop from top, siz原创 2021-07-04 09:47:28 · 80 阅读 · 0 评论 -
【辅助栈】offer 31 栈的压入、弹出序列
题目输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列{1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。输入:pushed = [1,2,3,4,5], popped = [4,5,3,2,1]输出:true解释:我们可以按以下顺序执行:push(1), push(2), push(3), push(4), po原创 2020-07-07 21:31:40 · 140 阅读 · 0 评论 -
【栈】 offer06 从尾到头打印链表
题目输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)输入:head = [1,3,2]输出:[2,3,1]代码public int[] reversePrint(ListNode head) { Deque<Integer> stack = new LinkedList<>(); //记着头结点不能随意移动,要用其他变量代表头结点 ListNode cur = head; while(cur!=null){原创 2020-07-04 15:13:06 · 90 阅读 · 0 评论 -
offer 09 用两个栈实现队列
题目用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )输入:[“CQueue”,“appendTail”,“deleteHead”,“deleteHead”][[],[3],[],[]]输出:[null,null,3,-1]...原创 2020-07-01 16:56:01 · 131 阅读 · 0 评论 -
【栈】 394 字符串解码
题目k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。输入:s = “3[a]2[bc]”输出:“aaabcbc”输入:s = “3[a2[c]]”输出:“accaccacc”思路建立两个栈,分别存储数字和字母。建立数字和字符串进行临时记录。当遍历到数字时,放入数字中。当遍历到字母时,放入字符串中。当遍历到【时,将数字放入数字栈,并清零。将字符串放入字符串栈中,并清空。当遍历到】时,数组栈出数字作为重复次原创 2020-06-29 15:24:20 · 150 阅读 · 0 评论 -
【快慢指针/栈】234 回文链表
题目描述判断一个链表是否为回文链表分析使用空间为n:将链表整个压入栈。然后栈元素弹出。挨个比较元素是否相同。使用空间为n/2:快慢指针。快指针一次两步慢指针一次一步。快指针到达结尾时,慢指针到达中间,中间部分之后压入栈。然后栈弹出元素,与前半部分相比较。不使用额外空间:快慢指针。快指针一次两步慢指针一次一步。快指针到达结尾时,慢指针到达中间。然后将后半部分链表逆序。两个指针分别从头尾出发,进行元素比较。最后要将后半部分再还原回来。代码...原创 2020-05-29 21:14:21 · 174 阅读 · 0 评论 -
【辅助栈】155 最小栈
题目设计一个支持push、pop、top操作,并能在常数内检索到最小元素的栈。分析使用辅助栈。当新来的数字小于或等于辅助栈栈顶元素、或者辅助栈为空时,将元素放入。pop时候,如果原栈出元素,辅助栈有这个元素也要一起出栈。获得的最小元素就是辅助栈的栈顶。代码public class solution155 { private Stack<Integer> data; private Stack<Integer> help; public sol原创 2020-06-05 23:51:32 · 211 阅读 · 0 评论 -
【哈希表 +栈】 20 有效的括号
题目描述给定一个只包括 ()【】{}的字符串,判断是否有效。左括号必须用相同类型的右括号闭合,左括号必须以正确的顺序闭合。思路分析首先字符串转换成字符数组,可以进行for的循环。用栈进行判断,当左括号时,入栈,当右括号时,出栈,如果最后栈非空,返回错误。用哈希数组进行辅助,增加了代码的复用性。同时减少了判断次数:键值对,用key代表闭括号进行判断代码实现...原创 2020-02-19 20:38:47 · 164 阅读 · 0 评论