栈的规则性设计 问题:定义栈的数据结构,请在该类型中实现一个能够得到栈中所含小元素的min函数(时间复杂度应为O(1))。 保证测试中不会当栈为空的时候,对栈调用pop()或者min()或者top()方法。 解决: #使用辅助栈 class Solution: def __init__(self): ...
分类:
其他好文 时间:
2020-07-26 19:23:34
阅读次数:
68
设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 push(x) —— 将元素 x 推入栈中。pop() —— 删除栈顶的元素。top() —— 获取栈顶元素。getMin() —— 检索栈中的最小元素。 思路:用一个辅助栈的栈顶记录原始栈的最小值,并且两个栈的 ...
分类:
其他好文 时间:
2020-07-22 20:49:40
阅读次数:
77
思路 借助辅助栈保存当前栈最小值。 入栈:如果入栈元素小于最小栈的栈顶元素,则同时加入最小栈;否则,将最小栈栈顶元素再次加入最下栈 出栈:同时弹出两个栈中元素 代码 时间复杂度:O(1) 空间复杂度:O(1) class MinStack { stack<int> st1; stack<int> s ...
分类:
其他好文 时间:
2020-06-17 20:02:45
阅读次数:
47
最小栈的实现 摘自漫画算法: 题目:实现一个栈,该栈带有出栈(pop)、入栈(push)、取最小元素(getMin)3个方法。要保证这3个方法的时间复杂度都是O(1)。 如图: 解法步骤 1、设原有的栈叫作栈A,此时创建一个额外的“备胎”栈B,用于辅助栈A。 2、当第1个元素进入栈A时,让新元素也进 ...
分类:
编程语言 时间:
2020-06-05 20:48:51
阅读次数:
58
辅助栈 思路 核心难点是如何处理嵌套的[ ] ,需要从内向外生成与拼接字符串 算法流程 构建辅助栈stack,遍历字符串s中每个字符c 当c为数字时,将数字字符转化为multi,用于后续倍数计算; 当c为字母时,在res尾部添加c; 当c为[时,将当前multi和res入栈,并分别置空: 记录此[前 ...
分类:
其他好文 时间:
2020-05-30 22:08:04
阅读次数:
68
来源:力扣(LeetCode) 解法一:辅助栈。 在遍历数组时用栈把数组中的数存起来,如果当前遍历的数比栈顶元素来的大,说明栈顶元素的下一个比它大的数就是当前元素。 class Solution { public: vector<int> dailyTemperatures(vector<int>& ...
分类:
其他好文 时间:
2020-05-16 00:59:19
阅读次数:
81
当一个元素要入栈时,我们取当前辅助栈的栈顶存储的最小值,与当前元素比较得出最小值,将这个最小值插入辅助栈中(min_stack.push(min(x,min_stack.top())) 当一个元素要出栈时,我们把辅助栈的栈顶元素也一并弹出; 在任意一个时刻,栈内元素的最小值就存储在辅助栈的栈顶元素中 ...
分类:
其他好文 时间:
2020-05-13 15:22:21
阅读次数:
54
分析 使用两个栈,一个主(s1),一个辅(s2) 我们并不需要真正实现类似队列的结构,只需要实现队列的功能即可: push:直接push到s1即可,这时和队列的性质相反(FIFO vs. LIFO) pop:目标是拿到队头,即栈底,只需要把除栈底外的元素移动到辅助栈s2,然后弹出栈底,最后把s2元素 ...
分类:
其他好文 时间:
2020-04-27 19:11:49
阅读次数:
59
[TOC] 21.包含min函数的栈 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。 注意:保证测试中不会当栈为空的时候,对栈调用pop()或者min()或者top()方法。 利用辅助栈,存储元素。当最小元素出栈后,次小元素仍在辅助栈中。 辅助 ...
分类:
其他好文 时间:
2020-04-13 13:59:55
阅读次数:
56
二叉树的镜像 递归法 递归的先序遍历二叉树,交换每个节点的左右子节点,即可生成二叉树的镜像 辅助栈/队列 利用栈或队列遍历树的所有节点,交换每个节点的左右子节点 ...
分类:
其他好文 时间:
2020-04-08 20:42:11
阅读次数:
60