栈
后进先出(LIFO-last in first out):最后插入的元素最先出来
Leetcode 20、有效的括号
https://leetcode-cn.com/problems/valid-parentheses/
由于题目的要求,判断字符串是否有效,这时候我们就可以利用栈的特性。
- 首先我们将左括号全部压入栈
- 然后只需要一一比对,就能得出正确答案
1 | public class Solution { |
Leetcode 155、最小栈
https://leetcode-cn.com/problems/min-stack/
题目的意思是设计一个支持push,pop,top操作栈,并且能够检索出栈中的最小元素
- 这时候我们可以利用两个栈,一个正常的栈,另外一个最小栈。我们取最小元素的时候直接从最小栈中去取即可。
1 | class MinStack { |
除了以上利用两个栈来实现一个最小栈,我们还可以用两个栈来实现一个队列
- 队列也是一种全新的数据结构
- 与栈相对应的,队列是先进先出(FIFO)
Leetcode232、用栈实现队列
https://leetcode-cn.com/problems/implement-queue-using-stacks/
通过以上的说明,既然队列是先进先出的结构,我们只要利用两个栈。便可以轻而易举的实现
1 | class MyQueue { |
单次pop操作的时间复杂度为O(1)。
即便在while循环中,最坏的复杂度为O(n)。但是pop操作n次,前面必然有n次push操作,所以平均时间复杂度还是O(1)。