题解 | #最小的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; }