LeetCode每日训练2—有序矩阵中第K小的元素(7.2)

    技术2022-07-20  82

    题目描述

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

    还可以用归并排序解决。

    Processed: 0.016, SQL: 9