题解 | #最小的K个数#
最小的K个数
https://www.nowcoder.com/practice/6a296eb82cf844ca8539b57c23e6e9bf
/********************************
关键处理:
定义一个数组更新的函数arrayUpdate,递归处理将传到函数的值放到数组指定位置;
递归思路:
如果当value小于等于传入数组arr首值,将传入值赋给*arr,将之前的数组首值tmp作为参数传入*arr之后的数组(arr+1, size -1)中
如果当value大于数组arr首值,将value作为参数放到数组首值*arr之后的数组(arr+1 , size-1)中
*********************************/
void arrayUpdate(int* arr, int size, int value) {
int i = 0;
int tmp = *arr;
if (size < 1) {
return;
}
if (value <= tmp) {
*arr = value;
arrayUpdate(arr + 1, size - 1, tmp);
} else {
arrayUpdate(arr + 1, size - 1, value);
}
}
int* GetLeastNumbers_Solution(int* input, int inputLen, int k,
int* returnSize ) {
// write code here
if (!input || inputLen == 0 || k > inputLen || k < 0 || k > 10000) {
*returnSize = 0;
return NULL;
}
int* arr = (int*)malloc(sizeof(int) * k);
for (int i = 0; i < k; i++) {
arr[i] = 1001;
}
for (int i = 0; i < inputLen; i++) {
arrayUpdate(arr, k, input[i]);
}
*returnSize = k;
return arr;
}