程序员代码面试指南天天练
感谢《程序员代码面试指南》一书的全体创作人员为我提供这么好的学习工具。本专栏将记录我的刷“题”之路,我将在每篇博客分享我的解题过程。
笑遥小哥哥
山坡若陡缓步迈
展开
-
栈和队列练习之由两个栈组成的队列(尉)
题目 编写一个类,用两个栈实现队列,支持队列的基本操作:add,poll,peek. 思路 栈的特点是先进后出,那么设有两个栈,第一个栈命名为stackPush,第二个栈命名为stackPop。假设有1,2,3,4,5依次进栈stackPush,然后1-5全部出栈到stackPop,此时stackPop的栈顶元素就是1了,此时出栈的第一个元素就是当前栈顶1了,也就是符合队列的先进先出特性了。 乍一看好像很简单的样子其实不然 第一种情况StackPush的元素未完全倒入StackPop,会导致本该在队列中部原创 2020-06-09 11:10:06 · 136 阅读 · 0 评论 -
栈和队列练习之设计一个getMin功能的栈(士)
题目 实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小的元素的操作。 要求 pop,push,getMin操作的时间复杂度都是O(1)。 设计的栈类型可以使用现成的栈结构。 我的思路 第一个想法就是最小数单独保存,只有这样getMin操作才实现O(1)时间复杂度,但是如果只设置一个变量去保存进栈时的最小值,那么出栈时如果出栈的数就是最小数,则最小数就无法更新成此刻的最小数了。所以一定要把进栈时所有更新的最小数都保存,且要满足后更新的数先删除,也就是后进先出,那就也用栈结构保存最小数。 解原创 2020-06-08 22:04:26 · 248 阅读 · 0 评论