目 录:
1、滑动窗口
- 生成窗口的最大值或者最小值数组,时间复杂度:O(N)。
可阅读:https://www.cnblogs.com/haozhengfei/p/a14049ec0869a8125a69f3af37471c77.html
- 普通解法的时间复杂度为O(N * win),也就是每次对一个窗口遍历其中的 win 个数,选出最大值,最优解可以做到 O(N)。
- 【分析】:准备一个双端队列,双端队列存放着数组中的下标值。假设当前为 arr[i],则放入规则如下:
- left 和 right 指针都只会向右移动,不会回退。
- right 右滑,窗口加数:
- 1)如果 queue 为空,直接把下标 i 放入 queue 中;
- 2)如果 queue 不为空,取出当前 queue 队尾存放的下标 j。如果 arr[j] > arr[i],则直接把 i 放入队尾;
- 3)如果 arr[j] <= arr[i],则一直从 queue 的队尾弹出下标,直到某个下标在 queue
- right 右滑,窗口加数: