2022-4-15 面试高频题
给你一个 n x n
矩阵 matrix
,其中每行和每列元素均按升序排序,找到矩阵中第 k
小的元素。
请注意,它是 排序后 的第 k
小元素,而不是第 k
个 不同 的元素。
你必须找到一个内存复杂度优于 O(n2)
的解决方案。
1 class Solution { 2 public int kthSmallest(int[][] matrix, int k) { 3 PriorityQueue<int[]> queue=new PriorityQueue<>((a,b)->(a[0]-b[0])); 4 int n=matrix.length; 5 for (int i=0;i<n;i++) { 6 queue.offer(new int[]{matrix[i][0],i,0}); 7 } 8 9 for (int i=0;i<k-1;i++) { 10 int[] cur=queue.poll(); 11 if (cur[2]<n-1) queue.offer(new int[]{matrix[cur[1]][cur[2]+1],cur[1],cur[2]+1}); 12 } 13 return queue.poll()[0]; 14 } 15 16 }
思路:相当于归并排序。