• Kth Smallest Number In Sorted Matrix


    Given a matrix of size N x M. For each row the elements are sorted in ascending order, and for each column the elements are also sorted in ascending order. Find the Kth smallest number in it.

    Assumptions

    • the matrix is not null, N > 0 and M > 0
    • K > 0 and K <= N * M

    Examples

    { {1,  3,   5,  7},

      {2,  4,   8,   9},

      {3,  5, 11, 15},

      {6,  8, 13, 18} }

    • the 5th smallest number is 4
    • the 8th smallest number is 6
    public class Solution {
      public int kthSmallest(int[][] matrix, int k) {
        // Write your solution here
        int rows = matrix.length;
        int columns = matrix[0].length;
        
        PriorityQueue<Cell> minHeap = new PriorityQueue<>(k, new Comparator<Cell>(){
          @Override
          public int compare(Cell c1, Cell c2){
            if(c1.value==c2.value){
              return 0;
            }else{
              return c1.value<c2.value?-1:1;
            }
          }
        });
        boolean[][] visited = new boolean[rows][columns];
        minHeap.offer(new Cell(0,0,matrix[0][0]));
        visited[0][0] = true;
        for(int i=0; i<k-1; i++){
          Cell cur = minHeap.poll();
          if(cur.row+1<rows&&!visited[cur.row+1][cur.col]){
            minHeap.offer(new Cell(cur.row+1, cur.col, matrix[cur.row+1][cur.col]));
            visited[cur.row+1][cur.col] = true;
          }
          if(cur.col+1<columns&&!visited[cur.row][cur.col+1]){
            minHeap.offer(new Cell(cur.row, cur.col+1, matrix[cur.row][cur.col+1]));
            visited[cur.row][cur.col+1] = true;
          }
        }
        return minHeap.peek().value;
      }
      static class Cell{
        int row;
        int col;
        int value;
        Cell(int row, int col, int value){
          this.row = row;
          this.col = col;
          this.value = value;
        }
      }
    }
  • 相关阅读:
    hdu 2639 Bone Collector II
    文件打包bundle
    iOS UITextField垂直居中
    Mac删除废纸篓中的单一文件和文件夹
    Swift 初见
    关于 Swift
    NSString和NSDate的转换
    iOS开发之iOS7设置状态栏字体颜色
    在当前界面中隐藏状态栏
    适合所有测试人员读的书籍
  • 原文地址:https://www.cnblogs.com/zg1005/p/12142992.html
Copyright © 2020-2023  润新知