当前位置: 代码迷 >> 综合 >> 有序矩阵中第K小的元素
  详细解决方案

有序矩阵中第K小的元素

热度:92   发布时间:2024-02-28 05:50:19.0

给定一个 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;

}

  相关解决方案