leetcode日记

今天刷(看)了一些leetcode的题目,于是记录一下。

(一)栈和队列

栈和队列有两道经典的算法题:用栈模拟队列和用队列模拟栈。首先我们分析栈和队列的异同。

栈是后进先出,队列是先进先出。当然,这样的分析还不够本质,更简单的说法是如果栈和队列都从同一端(a)出,队列会从另一端(b)入,栈会从a入。

如何用队列实现栈呢。栈的出pop和peek和队列一样,push则要修改。若现在的栈喂1,2,3,4,5,

5是栈顶元素。现在要在栈底插入0,。

则queue队列为

——————

1,2,3,4,5

——————

只能从左端出,从右端入。我们可以想到,先把0放入,然后依次取出1,2,3,4,5,放入右端。

leetcode日记_第1张图片


然后是用栈模拟队列。同样的,我们只要考虑push。用最简单的实现,就是把所有元素拿出来,再添加push的元素,再放入所有元素。

leetcode日记_第2张图片

leetcode日记_第3张图片

min stack

这一题是要求stack能够取出最小的node,感觉不是特别有意义的题目

用两个栈,一个是真实的栈,另一个作为辅助栈,辅助栈每次 push 时,会把新元素跟当前栈顶元素进行比
较,存入二者中较小的那个。
举个例子,对于序列
18, 19, 21, 15, 17 , 两个栈依次 push 进去的元素是这样的:
真实栈,
18, 19, 21, 15, 17

辅助栈, 18, 18, 18, 15, 15



4.Valid Parentheses

这题是给定三种括号和一个string,问你怎么判断这是不是有效的。

解法:每遇到一个左括号就push进stack,然后遇到对应的右括号就pop,如果两个左括号就return false


leetcode 链接 https://leetcode.com/tag/stack/

你可能感兴趣的:(Java,算法)