update 0239.滑动窗口最大值: 修改错字

This commit is contained in:
Yuhao Ju
2022-11-28 00:20:06 +08:00
committed by GitHub
parent 86119b88fc
commit 64a3c803b0

View File

@ -38,7 +38,7 @@
难点是如何求一个区间里的最大值呢? (这好像是废话),暴力一下不就得了。 难点是如何求一个区间里的最大值呢? (这好像是废话),暴力一下不就得了。
暴力方法,遍历一遍的过程中每次从窗口中找到最大的数值这样很明显是O(n × k)的算法。 暴力方法,遍历一遍的过程中每次从窗口中找到最大的数值这样很明显是O(n × k)的算法。
有的同学可能会想用一个大顶堆优先级队列来存放这个窗口里的k个数字这样就可以知道最大的最大值是多少了 **但是问题是这个窗口是移动的,而大顶堆每次只能弹出最大值,我们无法移除其他数值,这样就造成大顶堆维护的不是滑动窗口里面的数值了。所以不能用大顶堆。** 有的同学可能会想用一个大顶堆优先级队列来存放这个窗口里的k个数字这样就可以知道最大的最大值是多少了 **但是问题是这个窗口是移动的,而大顶堆每次只能弹出最大值,我们无法移除其他数值,这样就造成大顶堆维护的不是滑动窗口里面的数值了。所以不能用大顶堆。**
@ -66,7 +66,7 @@ public:
**可惜了,没有! 我们需要自己实现这么个队列。** **可惜了,没有! 我们需要自己实现这么个队列。**
然后分析一下,队列里的元素一定是要排序的,而且要最大值放在出队口,要不然怎么知道最大值呢。 然后分析一下,队列里的元素一定是要排序的,而且要最大值放在出队口,要不然怎么知道最大值呢。
但如果把窗口里的元素都放进队列里,窗口移动的时候,队列需要弹出元素。 但如果把窗口里的元素都放进队列里,窗口移动的时候,队列需要弹出元素。
@ -74,9 +74,9 @@ public:
大家此时应该陷入深思..... 大家此时应该陷入深思.....
**其实队列没有必要维护窗口里的所有元素,只需要维护有可能成为窗口里最大值的元素就可以了,同时保证队里的元素数值是由大到小的。** **其实队列没有必要维护窗口里的所有元素,只需要维护有可能成为窗口里最大值的元素就可以了,同时保证队里的元素数值是由大到小的。**
那么这个维护元素单调递减的队列就叫做**单调队列即单调递减或单调递增的队列。C++中没有直接支持单调队列,需要我们自己来一个单调队列** 那么这个维护元素单调递减的队列就叫做**单调队列即单调递减或单调递增的队列。C++中没有直接支持单调队列,需要我们自己来实现一个单调队列**
**不要以为实现的单调队列就是 对窗口里面的数进行排序,如果排序的话,那和优先级队列又有什么区别了呢。** **不要以为实现的单调队列就是 对窗口里面的数进行排序,如果排序的话,那和优先级队列又有什么区别了呢。**
@ -185,7 +185,7 @@ public:
}; };
``` ```
来看一下时间复杂度,使用单调队列的时间复杂度是 O(n)。 来看一下时间复杂度,使用单调队列的时间复杂度是 O(n)。
有的同学可能想了,在队列中 push元素的过程中还有pop操作呢感觉不是纯粹的O(n)。 有的同学可能想了,在队列中 push元素的过程中还有pop操作呢感觉不是纯粹的O(n)。