topk 4.有序矩阵中的第k个元素
如果是双层矩阵中找某个值,则可以从右上角开始找
找第k个小的值,则可以利用归并来归并每一行
多路归并有链表的多路归并,每次加入pq中一个节点,而数组其实也一样,每次加入一个三个值的数组,第一个值放现在到达的数组的值,第二个值放链表的顺序,第三个值放此矩阵中的值顺序。非常巧妙的方法。
import java.util.PriorityQueue;
import java.util.Arrays;
class Solution {public int kthSmallest(int[][] matrix, int k) {PriorityQueue<int[]> pq = new PriorityQueue<int[]>(new Comparator<int[]>() {public int compare(int[] a, int[] b) {return a[0] - b[0];}});for(int i=0;i<matrix.length;i++){pq.offer(new int[]{matrix[i][0], i, 0});}int res=-1;for(int i=0;i<k;i++){int[] temp=pq.poll();res=temp[0];if(matrix[temp[1]].length>temp[2]+1){pq.offer(new int[]{matrix[temp[1]][temp[2]+1], temp[1], temp[2]+1});}}return res;}
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
