文章目录
- 题目描述
- 代码 && 思路
- 二刷
题目描述
打卡第三天!加油加油~
- 数据结构笔试题貌似也会考= =,不过考法不一样,有点规律。
- 总的来说还是挺有意思的,我们直接来看代码吧~
代码 && 思路
- O(n) && O(n),依靠栈来实现
- 思路:栈循环装入元素,如果当前装入元素正好匹配弹出元素,就进行一个弹出循环
- 注意~要加入一个 isEmpty() 进行短路判断噢,避免空栈pop报错
class Solution {public boolean validateStackSequences(int[] pushed, int[] popped) {int len = pushed.length;Stack<Integer> stack = new Stack<>();int i = 0, j = 0;for(; i < len; i++) {stack.push(pushed[i]);// 每次push后,循环跑一次 popedwhile(!stack.isEmpty() && stack.peek() == popped[j]) {stack.pop();j++;}}// j 能跑完则说明可行return j == len;}
}
二刷
- 核心思路:每次都塞进一个。每塞进一个,就开个循环,能弹出多少就弹出多少。
class Solution {public boolean validateStackSequences(int[] pushed, int[] popped) {Deque<Integer> stack = new ArrayDeque<>();int popIndex = 0;for(int i = 0; i < pushed.length; i++) {stack.push(pushed[i]);while(!stack.isEmpty() && stack.element() == popped[popIndex]) {stack.pop();popIndex++;}}return popIndex == popped.length;}
}