解:维护两个栈即可,第二个栈中记录第一个栈中对应位置的最小值
2.
- 队列——》栈:
准备两个队列,每次往一个队列里添加,但如果需要返回数据,则把前面的n-1个数据放到第二个队列,返回剩下的第n个 - 栈——》队列:
代码:
- 补充:宽度优先用队列,深度用栈。如果面试让用栈完成宽度,队列完成深度,则是指这个题目
- 动态规划空间压缩:打表法时如果不需要全局表格,只需要某一行,可以只使用一行,不断更新这行。
- 当行特别长时,可以只使用一列不断更新
- 不能压缩的情况:每个格子依赖的格子太远了
是指容器的上方可以接水
i位置上的最大接水量等于它两边最大值中的最小值与i位置高度差
使用双指针依次遍历头和尾
5.
当全局的max在左边时,右边最大值一定>=arr[N-1],那么max|max左-max右|是划分在arr[N-1]处;max在右边时同理
6. 咖啡杯问题:arr代表冲咖啡的几台机器分别需要的时间,N代表喝咖啡的人数,a和b分别代表洗咖啡杯的时间和自然挥发干净的时间(要么一个个洗干净,要么自然变干净,前者只能串行后者可以并行)。那么全部流程完成最少需要多少时间
-
泡咖啡时间最短
设计一个小根堆,里面的每一个元素是一个二维的:(咖啡机空闲时间,咖啡机泡咖啡的时间),按照二维数字和组织小根堆。
初始:
第一个人选择时弹出(0,2),放回(2,2),变成:
N个人依次这样操作。
小根堆比较函数:
-
洗咖啡时间最短
drinks[]表示每个人喝完咖啡可以开始洗的时刻
p1表示如果当前杯子用咖啡机洗,完成所有杯子清洗所需的时间;
p2表示如果当前被子直接晾干,完成所有杯子清洗所需的时间
数组中的数分类:
奇数a个;2的倍数但不是4的倍数b个;4的倍数c个
(1)b == 0
奇4奇4奇4…,奇数旁边必须有4
a == 1,c>=1;
a>1,c>=(a-1)
(2)b!=0
必须每个2附近放2,最后一个2因子下面必须放4
2222224奇4奇4奇4…
a == 0,c>=0;
a == 1,c>=1;
a>1,c>=a