Given an array of n integer with duplicate number, and a moving window(size k), move the window at each iteration from the start of the array, find the maximum number inside the window at each moving.
给出一个可能包罗反复的整数数组,,和一个巨细为k的滑动窗口, 从左到右在数组中滑动这个窗口,找到数组中每个窗口内的最大值。
【标题问题链接】
【标题问题解析】
遍历数组nums,使用双端行列队伍deque维护滑动窗口内有可能成为最大值元素的数组下标。由于数组中的每一个元素至多只会入队、出队一次,因此均摊时间庞大度为O(n)。记当前下标为i,则滑动窗口的有效下标范畴为[i - (k - 1), i]。若deque中的元素下标< i - (k - 1),则将其从队头弹出,deque中的元素凭据下标递增挨次从队尾入队。这样就确保deque中的数组下标范畴为[i - (k - 1), i],满足滑动窗口的要求。
当下标i从队尾入队时,按序弹出行列队伍尾部不大于nums[i]的数组下标(这些被弹出的元素由于新元素的插手而变得没有意义)。deque的队头元素即为当前滑动窗口的最大值