leetcode 378. Kth Smallest Element in a Sorted Matrix 解题报告

原题链接

原题链接

解题思路

这道题用BFS+优先级队列(堆)。其实这道题和我前面写的一道题解题方法一模一样。题号是373。这里就不细讲了。

解题代码
public class Solution {
    public int kthSmallest(int[][] matrix, int k) {
          PriorityQueue<Num> q = new PriorityQueue<>();
        int n = matrix.length;
        int count = 0;
        int res = 0;
        q.offer(new Num(0,0,matrix[0][0]));
        boolean[][] visited = new boolean[n][n];
        visited[0][0] = true;
        while(!q.isEmpty()) {
            Num num = q.poll();
            if(++count == k) {
                return num.val;
            }
            if(num.x + 1 < n && !visited[num.x + 1][num.y]) {
                Num tnum = new Num(num.x + 1,num.y,matrix[num.x + 1][num.y]);
                q.offer(tnum);
                visited[num.x + 1][num.y] = true;
            }
            if(num.y + 1 < n && !visited[num.x][num.y + 1]) {
                Num tnum = new Num(num.x,num.y + 1,matrix[num.x][num.y + 1]);
                q.offer(tnum);
                visited[num.x][num.y + 1] = true;
            } 
        }
        return -1;
    }
}
class Num implements Comparable<Num>{
    int x;
    int y;
    int val;
    Num(int x,int y,int val) {
        this.x = x;
        this.y = y;
        this.val = val;
    }
    @Override
      public int compareTo(Num o) {
            return this.val - o.val;
      }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值