作者回复: 对的。
作者回复: 2进入window的时候,会把前面的那个1先顶出window.
作者回复: 帅!!
作者回复: 好的总结和回顾! 👍🏻
作者回复: 这是一个很好的问题。首先为什么用deque,就是因为在插入的时候,需要从 window 左边移除元素,而下标出了 window 之后,需要用右侧移除。回到你前半部分的理解:算法更优是因为有地方解决了前一种算法做的无用功,这个正确:这里我们不需要用堆去维护window里k个元素的大小顺序,只需要记录最大值,所以用heap有点杀鸡用牛刀的意思。
作者回复: 4在5被加入的时候就已经出去。由于每个元素只在window里呆一次,所以操作window的复杂度不和循环进行嵌套了。
作者回复: 对的,需要的。只是按照我们开始的算法,最大数出去之后,剩下的第二个数就是window-k里的最大数。
作者回复: 这个判断的时间是常数时间,不会在里面嵌套O(n)的时间,因为在全部循环操作中,每个元素都只进入k window一次
作者回复: 下次这种情况直接看解答和代码,理解了之后自己再回过头来反复写。
作者回复: 好问题。因为两层循环每层并不是跑满 o(n)。虽然是两层循环,但是从最后效果看,每个元素只被放入和拿出window一次,所以还是线性的时间复杂度。