给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第 k 小的元素。
请注意,它是排序后的第 k 小元素,而不是第 k 个不同的元素。
此题目不难,主要是使用qsort进行排序
int compare(const void *a, const void *b)
{
return *(int *)a - *(int *)b;
}
int kthSmallest(int **matrix, int matrixSize, int *matrixColSize, int k)
{
if (k == 1) {
return matrix[0][0];
}
int num = matrixSize * (*matrixColSize);
int *array = (int *)calloc(num, sizeof(int));
for (int i = 0; i < matrixSize; i++) {
for (int j = 0; j < *matrixColSize; j++) {
int idx = i * (*matrixColSize) + j;
array[idx] = matrix[i][j];
}
}
qsort(array, num, sizeof(int), compare);
int res = array[k - 1];
free(array);
return res;
}