Kth Smallest Number in Sorted Matrix
30:00
Find the kth smallest number in at row and column sorted matrix.
Example
Given k = 4
and a matrix:
[
[1 ,5 ,7],
[3 ,7 ,8],
[4 ,8 ,9],
]
return 5
Challenge
O(k log n), n is the maximal number in width and height.
typedef struct Node{ //这题的关键是要创建这样的Node结构体
int x;
int y;
int val;
Node(int _x, int _y, int _val): x(_x), y(_y), val(_val) {}
Node():x(-1),y(-1),val(-1) {}
bool operator <(Node a) const { return val <= a.val; }
bool operator >(Node a) const { return val > a.val; } //最小堆需要实现 operator >的运算符
}node;
class Solution {
public:
/**
* @param matrix: a matrix of integers
* @param k: an integer
* @return: the kth smallest number in the matrix
*/
int kthSmallest(vector<vector<int> > &matrix, int k) {
// write your code here
priority_queue<node, vector<node>, greater<node> >auxQueue;
for (int i=0; i<matrix.size(); i++)
{
node n(i, 0, matrix[i][0]);
auxQueue.push(n);
}
node retNode;
for (int i=1; i<=k; i++)
{
retNode = auxQueue.top();
auxQueue.pop();
if (retNode.y+1 < matrix[0].size())
auxQueue.push(node(retNode.x, retNode.y+1, matrix[retNode.x][retNode.y+1]));
}
return retNode.val;
}
};