给你一个 n x n
矩阵 matrix
,其中每行和每列元素均按升序排序,找到矩阵中第 k
小的元素。
请注意,它是 排序后 的第 k
小元素,而不是第 k
个 不同 的元素。
你必须找到一个内存复杂度优于 O(n2)
的解决方案。
示例 1:
输入:matrix = , k = 8 输出:13 解释:矩阵中的元素为 ,第 8 小元素是 13
|
示例 2:
输入:matrix = [[-5]], k = 1 输出:-5
|
提示:
n == matrix.length
n == matrix[i].length
1 <= n <= 300
-109 <= matrix[i][j] <= 109
- 题目数据 保证
matrix
中的所有行和列都按 非递减顺序 排列
1 <= k <= n2
C++
#define pii pair<int, int> class Solution { public: int kthSmallest(vector<vector<int>>& matrix, int k) { int n = matrix.size(), res = 0; auto comp = [&](pii& l, pii& r){ return matrix[l.first][l.second] > matrix[r.first][r.second];}; priority_queue<pii, vector<pii>, decltype(comp)> q(comp); for(int i = 0; i < n; ++i) q.emplace(i, 0); while(--k){ auto [i, j] = q.top(); q.pop(); if(j != n-1) q.emplace(i, j+1); } auto [i, j] = q.top(); return matrix[i][j]; } };
|