stack
USC_ECE
这个作者很懒,什么都没留下…
展开
-
JZ21 栈的压入、弹出序列
考虑借用一个辅助栈stack,模拟压入 / 弹出操作的排列。根据是否模拟成功,即可得到结果。 算法流程: 初始化: 辅助栈 stack,弹出序列的索引 idx; 遍历压栈序列: 各元素记为 num; 元素 num 入栈; 循环出栈:若 stack 的栈顶元素 == 弹出序列元素 popped[idx],则执行出栈与 idx++; 返回值: 若 stack 为空,则此弹出序列合法 import java.util.ArrayList; import java.util.Stack; publ..原创 2020-08-31 17:32:59 · 168 阅读 · 0 评论 -
JZ20 包含min函数的栈
新建一个栈,栈内存放的元素是一个长度为2的数组。数组的第一个元素是要压入栈的整数本身,第二个元素是迄今为止最小的数。 import java.util.Stack; public class Solution { Stack<int[]> stack = new Stack<>(); public void push(int node) { if(stack.isEmpty()){ stack.push(new原创 2020-08-31 17:04:34 · 120 阅读 · 0 评论 -
LeetCode 150. Evaluate Reverse Polish Notation
这也是一道很经典的stack类型题目。有几个需要注意的点: 输入是一个String[], 每个元素包括数字和运算符都是String需要双引号。 判断String是否相等使用euqals()方法:https://www.jianshu.com/p/3cd1912211d4; 加法和乘法具有交换律,所有我们不需要命名栈顶的两个数字;而减法和除法则不然,我们需要区分被减(减)数和减(除)数。 class Solution { public int evalRPN(String[] tokens).原创 2020-06-19 09:59:18 · 95 阅读 · 0 评论 -
LeetCode 20. Valid Parentheses
这里需要用一个栈,开始遍历输入字符串,如果当前字符为左半边括号时,则将其压入栈中,如果遇到右半边括号时,若此时栈为空,则直接返回 false,如不为空,则取出栈顶元素,若为对应的左半边括号,则继续循环,反之返回 false。值得注意的是最后一个else if条件句本身就包含了pop()操作。代码如下: class Solution { public boolean isValid(String s) { Stack<Character> stack = new Sta原创 2020-06-17 14:44:54 · 98 阅读 · 0 评论 -
LeetCode 155. Min Stack
我们每次往stack里压入长度为2的数组,第1个元素是需要入栈的整数本身,第2个元素是到目前为止栈内最小的数。 class MinStack { private Stack<int[]> stack; /** initialize your data structure here. */ public MinStack() { stack = new Stack<>(); } public void p原创 2020-06-17 13:09:04 · 120 阅读 · 0 评论 -
LeetCode 232. Implement Queue using Stacks
这道题我们使用了两个stack。两个stack可以放在field里初始化,代码如下: class MyQueue { Stack<Integer> stack1 = new Stack<>(); Stack<Integer> stack2 = new Stack<>(); /** Initialize your data structure here. */ public MyQueue() {原创 2020-06-17 12:11:32 · 83 阅读 · 0 评论 -
LeetCode 225. Implement Stack using Queues
这道题可以用两个queue,也可以用一个queue。考虑到本题queue可以知道size,因此使用一个queue来implement stack。 class MyStack { Queue<Integer> queue; /** Initialize your data structure here. */ public MyStack() { queue = new LinkedList<>(); }原创 2020-06-17 12:43:01 · 96 阅读 · 0 评论 -
LeetCode 445. Add Two Numbers II
这道题有两种解法: 1.利用栈的先进后出原则实现加法,将链表数据入栈,栈顶为低位。这里采用头插法来使链表逆序 /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val,.原创 2020-06-16 14:17:55 · 186 阅读 · 0 评论