剑指 Offer 31. 栈的压入、弹出序列
题目描述:
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。
注意审题!!!
知识点:
掌握栈的使用:
import java.util.Stack; //引用栈
//初始化
Stack<Integer> stack = new Stack<Integer>();
//进栈
stack.push(Element);
//出栈
stack.pop();
//取栈顶值(不出栈)
stack.peek();
//判断栈是否为空
stack.isEmpty()
题目解析:(抄的答案,感觉很有味道,思路啧啧啧……绝了!)
class Solution {
public boolean validateStackSequences(int[] pushed, int[] popped) {
Stack<Integer> stack = new Stack<Integer>();
int i = 0;
//就这个for循环,啧
for(int num:pushed){
stack.push(num);
while(!stack.isEmpty() && stack.peek() == popped[i]){
i++;
stack.pop();
}
}
return stack.isEmpty();
}
}
剑指 Offer 32 - I. 从上到下打印二叉树
题目描述:
从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。
又称为二叉树的 广度优先搜索(BFS)。
BFS 通常借助 队列 的先入先出特性来实现
知识点:
1、arrayList的使用:
ArrayList 类是一个可以动态修改的数组,没有固定大小的限制,可以添加或删除元素。
参考链接:菜鸟
import java.util.ArrayList; // 引入 ArrayList 类
import java.util.Collections; // 引入 Collections 类
ArrayList<String> sites = new ArrayList<String>(); // 初始化
sites.add("Google"); //增加
sites.get(1); //访问
sites.set(2, "Wiki"); // 第一个参数为索引位置,第二个为要修改的值
sites.remove(3); // 删除
sites.size(); //计算大小
Collections.sort(sites); // 排序
2、Queue(队列)的使用
队列是一种特殊的线性表,它只允许在表的前端进行删除操作,而在表的后端进行插入操作。
(先入先出)
链接:菜鸟
import java.util.LinkedList;
import java.util.Queue;
Queue<String> queue = new LinkedList<String>(); //队列的元素也可以是TreeNode这类哦,神奇吧~
queue.offer("a"); //添加
//此方法之间的区别详看链接
String q = queue.poll(); //返回第一个元素,并在队列中删除
String q2 = queue.element(); //返回第一个元素 ,不删除
String q3 = queue.peek()); //返回第一个元素 ,不删除
3、Java判断Stack和Queue是否为空的方法
原文链接:csdn
Stack
stack.empty(), 为空返回true,不为空返回false。
stack.isEmpty(), 为空返回true,不为空返回false(与stack.empty()无结果上的区别)。
stack.peek(), 为空返回null,不为空返回栈顶元素。
stack.size(), 为空返回0,不为空返回一个大于1的整数。
Queue
queue.isEmpty(), 为空返回true,不为空返回false。
queue.peek(), 为空返回null,不为空返回栈顶元素。
queue.size(), 为空返回0,不为空返回一个大于1的整数