题解 | #滑动窗口的最大值#
滑动窗口的最大值
http://www.nowcoder.com/practice/1624bc35a45c42c0bc17d17fa0cba788
用数组实现栈功能
//比较大小所用的函数
int max(int* numList,int numSize){
int temp=numList[0];
for(int i=1;i<numSize;i++){
if(temp<numList[i]){
temp=numList[i];
}
}
return temp;
}
//主函数
int* maxInWindows(int* num, int numLen, int size, int* returnSize ) {
//初始化结果数组
*returnSize=0;
int* res=(int*)malloc(sizeof(int)*(numLen-size+1));
//初始化一个队,用来不断存入数据
int* queue;
queue=(int*)malloc(sizeof(int)*numLen);
int head=0,tail=0;
//循环入队
for(int i=0;i<=numLen;i++){
//如果队头和队尾之间的数据个数达到要求
if(tail-head==size){
//找到此部分数据中最大的存入结果数组
res[(*returnSize)++]=max(&num[head],size);
//队头向后移一位
head++;
}
//如果队头队尾之间数据不够
if(tail-head<size){
//继续入队数据
queue[tail++]=num[i];
}
}
return res;
}