第一章 栈和队列(3)
求最大子矩阵的大小
如 1 1 1 0 最大子矩阵有三个数
或
1 0 1 1
1 1 1 1
1 1 1 0
最大子矩阵有6个数
要做到O(N*M)这一题的解题思想是遍历时,找到以当前行为底的最大矩阵为多少。另外记录一下当前最大子矩阵是多少,随时更新就可以。
最大值减去最小值小于或等于num的子数组的数量
这又是一个窗口问题,需要用到 双端队列,使得时间复杂度是O(N),空间复杂度O(N)。当找到一个符合要求的窗口时,窗口中,所有的子数组都是符合要求的。
可见山峰对数量
使用单调栈结构,小找大。
按顺序压入,碰到乱序则清算。全部遍历完再清算。遇到相同的可以叠加,但是有一个排列组合的问题来计算数量。
OK第一长得内容结束了。核心的抓手一个是单调栈,一个是双端队列。单调栈用在需要记录大小比较结果的情况,双端队列用在需要出现窗口的情况。