题目:
代码:已编译通过,并测试,如有问题,请在下面留言。
#include <stdio.h>
#include <stdlib.h>
int get_windows(int *array, int array_length, int window_len){
int *assist_queue = NULL; //辅助队列
int head_pos, tail_pos;
int queue_len;
int i;
if(window_len > array_length || array_length <= 0 || window_len <= 0 || !array){
return -1;
}
//1. 初始化
assist_queue = calloc(sizeof(int), array_length);
if(!assist_queue) return -1;
head_pos = 0;
tail_pos = 0;
queue_len = 0;
//2. 查找
printf("[");
//i每加一次,窗口向前滑动一次
for(i = 0; i < array_length; i++){
if(queue_len > 0){
//超出窗口范围,则删除
if(assist_queue[head_pos] <= i - window_len){
head_pos += 1;
queue_len -= 1;
}
//从右向左删除