初学:用了malloc动态分配空间,否则在栈上分配空间,函数返回时,内存可能被回收,是指针指向无效内存;然后正常循环,寻找符合条件的数组,在新数组上填上最大值或-1;最后设置returnSize的值,将结果数组的大小传递回调用者,否则会输出一个空壳。最后返回指向最终数组的指针a 。(difficult)
int* resultsArray(int* nums, int numsSize, int k, int* returnSize) {
int isok = 1;
//*a是指针,指向存储的内存空间
int* a = (int*)malloc((numsSize - k + 1) * sizeof(int));
//动态分配空间,存储大小为(numsSize - k + 1) * sizeof(int)的数组
int b = 0;
for (int i = 0; i <= numsSize - k; i++) {
isok = 1;//每次先假设符合条件
for (int j = i; j < i + k - 1; j++) {
if (nums[j] + 1!= nums[j + 1]) {
isok = 0;
break;
}
}
if (!isok) {
a[b++] = -1;
} else {
a[b++] = nums[i + k - 1];
}
}
*returnSize = numsSize - k + 1;//非常重要,如果没有就只能输出数组壳;作用是传递数组真实大小
return a;
}