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

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。