int* maxSlidingWindow(int* nums, int numsSize, int k, int* returnSize){
int q[numsSize];//创建队列
memset(q, 0, sizeof(q));//初始化队列
int head = 0, tail = 0;//初始化指针
int *ret = (int *)calloc(sizeof(int), numsSize);//创建返回数组
int cnt = 0;//记录返回数组元素个数
for (int i = 0; i < numsSize; i++) {
while (head != tail && nums[i] >= nums[q[tail - 1]]) tail--;//违反单调性就剔除
q[tail++] = i;//将当前索引入队
if (i - k >= q[head]) head++;//当头部元素不在窗口时,淘汰
if (i < k - 1) continue; //没有达到窗口大小,继续入队
ret[cnt++] = nums[q[head]];//头部元素就是窗口最大值,维护的是单调递减,所以头部就是最大值,反之就是最小值
}
*returnSize = cnt;
return ret;
}