59.滑动窗口的最大值

4个小时才算大致把这道题给搞明白了。。。前面一直被卡着就是想不通。

首先定义了一个双向链表来存储放入值的数组下标,注意!是数组下标,不是这个数!因为后面要通过下标和滑动窗口的大小的和来判断首元素该不该从链表头部移除,其实窗口的滑动就是首元素的移除和尾元素的进入。这里要注意的是,假如新进来的数比尾元素大,则要移除尾元素,知道新的尾元素比即将进来的值大或者链表为空才停止,因为假如不移除的话,那么新元素进来,前面的小于该元素的值是绝对不可能成为最大值的(在滑动窗口内)。假如链表尾元素的值加上滑动窗口的值等于遍历到的下标i时,说明首元素到了该被移除窗口的时候了,因为窗口下一次滑动就不会包括该元素,所以移除首元素,当i是大于等于k-1的情况下,每次循环都会把对应的值加入到res中

代码如下:

发布了208 篇原创文章 · 获赞 0 · 访问量 5986

猜你喜欢

转载自blog.csdn.net/qq_40058686/article/details/104598993