题目描述
给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第 k 小的元素。
请注意,它是排序后的第 k 小元素,而不是第 k 个不同的元素。
示例:
matrix = [
[ 1, 5, 9],
[10, 11, 13],
[12, 13, 15]
],
k = 8,
返回 13。
首先最直接的思路就是把这个二维数组存到一维数组中,然后在一维数组中进行排序找到第k个元素
class Solution {
public int kthSmallest(int[][] m,int n) {
int r=m.length ,t=m[0].length;
int[] s=new int[r*t];//转化成一个一维数组,数组大小是r*t
int index=0;
for(int[] r1:m)//一行一行遍历
{
for(int r2:r1)//遍历每行
{
s[index++]=r2;
}
}
Arrays.sort(s);//排序
return s[n-1];
}
}
public class Main {
public static void main(String[] args) {
Solution so=new Solution();
int[][] m= {{1, 5, 9},{10, 11, 13},{12, 13, 15}};
int a= so.kthSmallest(m,8);
System.out.println(a);
}
}
复杂度分析
时间复杂度:O(n^2\log{n})
对 n^2个数排序。
空间复杂度:O(n^2),
一维数组需要存储这 n^2个数。
还可以用归并排序解决。