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