题目:给定一个 n x n
矩阵,其中每行和每列元素均按升序排序,找到矩阵中第 k
小的元素
举例:
matrix = [
[ 1, 5, 9],
[10, 11, 13],
[12, 13, 15] ], k = 8
返回 13
看到题目首先想到将二维数组转为一维数组,再进行排序,取出第k个元素,这样的解法没有问题,可以正确得到结果。
排序算法就不写了,应该都很熟。。。
这里介绍一个更好的方法
/*
寻找有序二维数组(n * n)中第K小的数
*/
bool check(int (*matrix)[6], int mid, int k, int n) {
int i = n - 1;
int j = 0;
int num = 0;
while (i >= 0 && j < n) {
if (matrix[i][j] <= mid) {
num += i + 1;
j++;
} else {
i--;
}
}
return num >= k;
}
int kthSmallest(int (*matrix)[6], int matrixSize, int k) {
int left = matrix[0][0];
int right = matrix[matrixSize - 1][matrixSize - 1];
while (left < rig