ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

LeetCode 378. 有序矩阵中第K小的元素 Java

2020-07-02 12:01:56  阅读:302  来源: 互联网

标签:Java matrix int public PriorityQueue 378 数组 排序 LeetCode


容易想到的暴力解法:把数据都取出来排序,需要n2大小的数组存储

既然数组是有序的,把每一行看成一个有序数组,对这些数组进行归并排序,归并到第k个数为止。
看了题解,了解到优先级队列PriorityQueue可以用于实现归并排序,PriorityQueue底层是一个堆的结构。具体可参考这篇文章 刷算法不知道PriorityQueue?看了这篇文章才知道他有多实用

还有一种二分查找的算法,感觉不太容易想出。

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];
            }
        });
        int n = matrix.length;
        for(int i=0;i<n;i++){
            pq.offer(new int[]{matrix[i][0],i,0});
        }
        for(int i=0;i<k-1;i++){
            int []now = pq.poll();
            if(now[2] != n-1){
                pq.offer(new int[]{matrix[now[1]][now[2]+1],now[1],now[2]+1});
            }
        }
        return pq.poll()[0];
    }
}

标签:Java,matrix,int,public,PriorityQueue,378,数组,排序,LeetCode
来源: https://www.cnblogs.com/yu-jiawei/p/13223929.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有