算法与数据结构基础 - 堆栈(Stack)
堆栈基础
堆栈(stack)具有“后进先出”的特性,利用这个特性我们可以用堆栈来解决这样一类问题:后续的输入会影响到前面的阶段性结果。线性地遍历输入并用stack处理,这类问题较简单,求解时间复杂度一般为O(n)。
相关LeetCode题:
844. Backspace String Compare 题解
1047. Remove All Adjacent Duplicates In String 题解
150. Evaluate Reverse Polish Notation 题解
堆栈处理嵌套关系
堆栈还可以用于解决嵌套类问题,例如 LeetCode 856. Score of Parentheses,时间复杂度O(n):
//856. Score of Parentheses
int scoreOfParentheses(string S) {
stack<int> st;
st.push(); //最终结果
for(char c:S){
if(c=='(') st.push(); //暂存中间结果
else{
int val=st.top();st.pop();
val=st.top()+max(val*,); st.pop(); //更新中间和最终结果
st.push(val);
}
}
return st.top();
}
这类问题的难点在于理解嵌套过程,分析在单个嵌套开始时如何用stack暂存状态、对应嵌套结束时如何更新状态。嵌套问题一般也可以使用递归求解,递归解法理解起来比堆栈解法更直观:直至嵌套的中心、层层往外处理。
相关LeetCode题:
856. Score of Parentheses 堆栈题解 递归题解
341. Flatten Nested List Iterator 题解
636. Exclusive Time of Functions 题解
单调栈
形如这样的问题也可用堆栈解决:对一个数组,对每个元素求大于或小于该元素的下一个数,例如 LeetCode 503. Next Greater Element II:
//503. Next Greater Element II
vector<int> nextGreaterElements(vector<int>& nums) {
vector<int> res(nums.size(),-);
stack<int> st;
for(int i=nums.size()-;i>=;i--) st.push(i);
for(int i=nums.size()-;i>=;i--){
while(!st.empty()&&nums[i]>=nums[st.top()]) st.pop();
if(!st.empty()) res[i]=nums[st.top()];
st.push(i);
}
return res;
}
以上堆栈形式叫单调栈(monotone stack),栈内元素单调递增或递减,用其可以实现O(n)时间复杂度求解问题。
相关LeetCode题:
503. Next Greater Element II 题解
1063. Number of Valid Subarrays 题解
1019. Next Greater Node In Linked List 题解
84. Largest Rectangle in Histogram 题解
算法与数据结构基础 - 堆栈(Stack)的更多相关文章
- 算法与数据结构基础 - 二叉树(Binary Tree)
二叉树基础 满足这样性质的树称为二叉树:空树或节点最多有两个子树,称为左子树.右子树, 左右子树节点同样最多有两个子树. 二叉树是递归定义的,因而常用递归/DFS的思想处理二叉树相关问题,例如Leet ...
- 算法与数据结构基础 - 深度优先搜索(DFS)
DFS基础 深度优先搜索(Depth First Search)是一种搜索思路,相比广度优先搜索(BFS),DFS对每一个分枝路径深入到不能再深入为止,其应用于树/图的遍历.嵌套关系处理.回溯等,可以 ...
- 算法与数据结构基础 - 哈希表(Hash Table)
Hash Table基础 哈希表(Hash Table)是常用的数据结构,其运用哈希函数(hash function)实现映射,内部使用开放定址.拉链法等方式解决哈希冲突,使得读写时间复杂度平均为O( ...
- 算法与数据结构基础 - 堆(Heap)和优先级队列(Priority queue)
堆基础 堆(Heap)是具有这样性质的数据结构:1/完全二叉树 2/所有节点的值大于等于(或小于等于)子节点的值: 图片来源:这里 堆可以用数组存储,插入.删除会触发节点shift_down.shif ...
- 算法与数据结构基础 - 广度优先搜索(BFS)
BFS基础 广度优先搜索(Breadth First Search)用于按离始节点距离.由近到远渐次访问图的节点,可视化BFS 通常使用队列(queue)结构模拟BFS过程,关于queue见:算法与数 ...
- 算法与数据结构基础 - 分治法(Divide and Conquer)
分治法基础 分治法(Divide and Conquer)顾名思义,思想核心是将问题拆分为子问题,对子问题求解.最终合并结果,分治法用伪代码表示如下: function f(input x size ...
- 算法与数据结构基础 - 双指针(Two Pointers)
双指针基础 双指针(Two Pointers)是面对数组.链表结构的一种处理技巧.这里“指针”是泛指,不但包括通常意义上的指针,还包括索引.迭代器等可用于遍历的游标. 同方向指针 设定两个指针.从头往 ...
- 算法与数据结构基础 - 贪心(Greedy)
贪心基础 贪心(Greedy)常用于解决最优问题,以期通过某种策略获得一系列局部最优解.从而求得整体最优解. 贪心从局部最优角度考虑,只适用于具备无后效性的问题,即某个状态以前的过程不影响以后的状态. ...
- 算法与数据结构基础 - 图(Graph)
图基础 图(Graph)应用广泛,程序中可用邻接表和邻接矩阵表示图.依据不同维度,图可以分为有向图/无向图.有权图/无权图.连通图/非连通图.循环图/非循环图,有向图中的顶点具有入度/出度的概念. 面 ...
随机推荐
- Harden the Hacker Thinking (Updating)
录制自己的最新思考harden过程.通过记录,反射,加强管理,发现缺陷. 等一下design,等一下coding,三十分钟rethinking. 2015-02-26 : 不要在一件事上停留太久: 歇 ...
- ABP框架——单表实体流程
实体实体配置文件菜单本地化语言:xml文件权限配置领域服务应用层CRUDDTOSPA路由:app.js视图生成:.html,.js
- wpf窗体定位
原文:wpf窗体定位 据WPF外包小编了解,通常,不需要在屏幕上明确定位窗口.而是简单地将WindowState属性设置为Normal,并忽略其他所有细节.另一方面,很少会将WindowStartup ...
- Resolve conflict using "MERGE_HEAD (origin/HEAD)"
Git进行同步的时候,经常会出现冲突,有时候冲突的选项会有图示中的三种选项: 1.Resolved:直接把文件标识为冲突已经解决,一般是自己手动查看并解决完冲突以后使用. 2.Resolve conf ...
- 零元学Expression Blend 4 - Chapter 45 ListBox里的物件不能换行吗?
原文:零元学Expression Blend 4 - Chapter 45 ListBox里的物件不能换行吗? ListBox里的排列不是垂直就是水平,觉得这样的排列很枯燥乏味吗? 想要它变聪明吗? ...
- Advanced Installer 安装前卸载旧版本的办法
原文:Advanced Installer 安装前卸载旧版本的办法 Advanced Installer这个工具百度出来的资料太少了. 在我们平常打包的工作中,经常遇到的一个问题是,如何能在安装新版本 ...
- web appbuilder 正式版用yo esri-appbuilder-js:widget生成widget读取不到config解决方案
对于在webappBuilder正式版中,如果用yo esri-appbuilder-js:widget生成的widget,在写widget的时候widget里面的config.json ...
- LigerUI中Grid的使用时关于url请求不到数据的问题
前台代码:(这里贴的是js的代码,完整的代码可以在LigerUI的文档中找到), 这里使用的是url请求数据,问题不是处在前台,所以就不细说. $("#maingrid").lig ...
- Qt的模态对话框和非模态对话框 经常使用setAttribute (Qt::WA_DeleteOnClose)
模态对话框就是指在子对话框弹出时,焦点被强行集中于该子对话框,子对话框不关闭,用户将无法操作其他的窗口.非模态相反,用户仍然可以操作其他的窗口,包括该子对话框的父对话框. 如果从线程角度来讲,模态对话 ...
- 无辜的RAD(RAD是让你去创造和使用可复用的组件,不是让程序员“变白痴”)good
无辜的RAD 2005-3-21 说实话,RAD很无辜.从出生的那天其就被骂,天天被指着鼻子说“不就是拖个控件嘛”,就好像当年说学电脑“不就是插个鼠标嘛”.也怪程序员大都天性犯贱,就爱一遍又一便的写基 ...