C语言没有优先队列库,如果自己实现的话在考试是不现实的。优先使用暴力简单的方法加稍微优化尽可能多的过例子。
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int findmax(int* nums,int head,int tail){
int max=nums[head];
for(int i=head;i<=tail;i++){
if(nums[i]>max) max=nums[i];
}
return max;
}
int* maxSlidingWindow(int* nums, int numsSize, int k, int* returnSize) {
*returnSize=0;
if(k>numsSize) return NULL;
int* array=(int*)malloc(sizeof(int)*numsSize);
*returnSize=numsSize-k+1;
if(k==1){
for(int i=0;i<numsSize;i++) array[i]=nums[i];
return array;
}
int count=1,max=findmax(nums,0,k-1);
array[0]=max;
for(int i=k;i<numsSize;i++){
if(nums[i]>=max){
max=nums[i];
array[count++]=max;
}else{
if(nums[i-k]==max){
max=findmax(nums,i-k+1,i);
array[count++]=max;
}else{
array[count++]=max;
}
}
}
*returnSize=count;
return array;
}
标签:numsSize,nums,int,max,最大值,returnSize,239,滑动,array
From: https://www.cnblogs.com/llllmz/p/18071384