算法总结——堆栈

先说stack的题目

stack的实现:链表,数组

题目:

(1)简单的:min stack,一个数组实现三个stack

(2)经典的stack问题:经典汉诺塔问题,逆波兰式计算或者产生逆波兰式,简化文件路径,验证括号对是否合法,找出最长有效括号(贪心+stack求解)

(3)涉及tree的遍历问题:tree中序遍历的迭代解法,二叉搜索树的两节点和(two sum思路)

(4)***stack排序问题***:为stack排序,从柱状图里找最大矩形(本质上类似stack排序),构造数组的maxtree(和最大矩形题目类似思路)

(5)蛋疼的其他问题:仅使用递归反转一个stack(两个递归函数,***hard***)

再说队列的题目

队列的实现:链表

题目:猫狗队列(链表合并),两个stack实现队列,数组滑动窗口的最大值(类似stack排序做,和柱状里找最大矩形题目解法有点类似,***hard***)

最后是堆的题目

题目:

(1)经典问题:合并多个有序链表,行列有序矩阵topK(k*logk解法,j+1,i+1)

(2)***需要观察总结规律的***:数组滑动窗口的最大值(使用优先级队列剔除“过期”的最大值),最大值-最小值<=num的子数组数目(滑动窗口+堆)

原文地址:https://www.cnblogs.com/bonelee/p/10188204.html

时间: 2024-10-12 21:40:01

算法总结——堆栈的相关文章

数据结构与算法问题 堆栈使用 2011年吉林大学计算机研究生机试真题

题目描述: 堆栈是一种基本的数据结构.堆栈具有两种基本操作方式,push 和 pop.Push一个值会将其压入栈顶,而 pop 则会将栈顶的值弹出.现在我们就来验证一下堆栈的使用. 输入: 对于每组测试数据,第一行是一个正整数 n,0<n<=10000(n=0 结束).而后的 n 行,每行的第一个字符可能是'P'或者'O'或者'A':如果是'P',后面还会跟着一个整数,表示把这个数据压入堆栈:如果是'O',表示将栈顶的值 pop 出来,如果堆栈中没有元素时,忽略本次操作:如果是'A',表示询问

数据结构和算法-006 堆栈

堆栈,都懂得.先进后出.直接看代码吧,实现以下功能: 创建堆栈 压入值 弹出值 查看栈顶值 压入一组值 public class TheStack {          private String [] stackArray;          private int stackSize;          private int topOfStack = -1;          TheStack(int size){         stackSize = size;           

数据结构与算法2-4 堆栈链式存储

链表中,只有一端进行插入与删除 在表头的位置,以避免需要知道实际数据长度 结构: typedef struct Node() { ElementType data; struct node *Next; }List; List *Ptrl; 构造: List *empty() { List *Ptrl; Ptrl=(List *)malloc(sizeof(List)); Ptrl->Next=NULL; return Ptrl; } 判断是否是空表 int isEmpty(List *Ptrl

各种排序算法性能比较

插入排序包括直接插入排序.希尔排序. 1.直接插入排序: 如何写成代码: 首先设定插入次数,即循环次数,for(int i=1;i<length;i++),1个数的那次不用插入. 设定插入数和得到已经排好序列的最后一个数的位数.insertNum和j=i-1. 从最后一个数开始向前循环,如果插入数小于当前数,就将当前数向后移动一位. 将当前数放置到空着的位置,即j+1. 代码实现如下: package zhouls.bigdata.DataFeatureSelection; import jav

中国大学MOOC-陈越、何钦铭-数据结构-2016秋期末考试

判断题: 1-1 N2logN和NlogN2具有相同的增长速度. (2分) 1-2 对一棵平衡二叉树,所有非叶结点的平衡因子都是0,当且仅当该树是完全二叉树.(2分) 1-3 无向连通图所有顶点的度之和为偶数. (2分) 1-4 对N个不同的数据采用冒泡排序进行从大到小的排序,当元素基本有序时交换元素次数肯定最多. (2分) 1-5 若用平方探测法解决冲突,则插入新元素时,若散列表容量为质数,插入就一定可以成功. (2分) 选择题: 2-1 设栈S和队列Q的初始状态均为空,元素a.b.c.d.e

单片机工程师必备的知识

C语言编程 程序编译过程  哪部分干什么 数据结构  链表 二叉树 算法   数组  堆栈 队列算法 遍历 常量在内存中的表现形式 语法和内存的对应关系 数电 UML 类图 时序图 状态图 用例图  流程图

for重复结构

for重复结构处理计数器控制循环的所有细节.要演示for的功能,可以改写图2.16的程序,结果如图2.17. 执行for重复结构时,声明控制变量counter并将其初始化为1.然后检查循环条件counter <=10.由于counter的初始值为1,因此条件满足,打印Counter的值(1).然后在表达式Counter++中递增控制变量counter,再次进行循环和测试循环条件.由于这时控制变量等于2,没有超过最后值,因此程序再次执行语句体.这个过程一直继续,直到控制变量counter递增到11

Drools文档(八) 规则语言参考

规则语言参考 概述 Drools有一个"本地"的规则语言.这种格式在标点符号上非常轻,并且通过"扩展器"支持自然语言和领域特定的语言,使语言能够变形到您的问题领域.本章主要与本机规则格式一致.用于表示语法的图表被称为"铁路"图表,它们基本上是语言术语的流程图.技术上非常热衷的也可以参考DRL.g这是规则语言的Antlr3语法.如果您使用Rule Workbench,则可以通过内容帮助为您完成许多规则结构,例如,输入"ru"并按

BAT大牛亲授技能 技巧 Android面试快速充电升级

第1章 课程介绍(本课程专为初中级同学面试复习)本课程专为初中级程度同学面试准备的系统复习指南,本章带你了解面试过程中会遇到的问题,个人应该摆正的心态,以及面试官最为看重你的解决问题的思路.关于框架面试专题课程请移步到:http://coding.imooc.com/class/157.html1-1 课程介绍 第2章 Android开发岗位技术要求和面试前的准备本章对各个级别Android开发工程师的招聘需求进行深入分析,并带大家清晰完整的了解面试复习与准备思路,做到有的放矢,有侧重点的进行复