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;
}