[LintCode] Kth Smallest Number in Sorted Matrix 有序矩阵中第K小的数字
2016-09-01 12:24
387 查看
Find the kth smallest number in at row and column sorted matrix.
Have you met this question in a real interview?
Yes
Example
Given k =
return
Challenge
O(k log n), n is the maximal number in width and height.
LeetCode上的原题,请参见我之前的博客Kth Smallest Element in a Sorted Matrix。
解法一:
解法二:
解法三:
Have you met this question in a real interview?
Yes
Example
Given k =
4and 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.
LeetCode上的原题,请参见我之前的博客Kth Smallest Element in a Sorted Matrix。
解法一:
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) { priority_queue<int, vector<int>> q; for (int i = 0; i < matrix.size(); ++i) { for (int j = 0; j < matrix[i].size(); ++j) { q.push(matrix[i][j]); if (q.size() > k) { q.pop(); } } } return q.top(); } };
解法二:
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) { int left = matrix[0][0], right = matrix.back().back(); while (left < right) { int mid = left + (right - left) / 2, cnt = 0; for (int i = 0; i < matrix.size(); ++i) { cnt += upper_bound(matrix[i].begin(), matrix[i].end(), mid) - matrix[i].begin(); } if (cnt < k) left = mid + 1; else right = mid; } return left; } };
解法三:
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) { int left = matrix[0][0], right = matrix.back().back(); while (left < right) { int mid = left + (right - left) / 2; int cnt = search_less_equal(matrix, mid); if (cnt < k) left = mid + 1; else right = mid; } return left; } int search_less_equal(vector<vector<int>>& matrix, int target) { int m = matrix.size(), n = matrix[0].size(), i = m - 1, j = 0, res = 0; while (i >= 0 && j < n) { if (matrix[i][j] <= target) { res += i + 1; ++j; } else { --i; } } return res; } };
相关文章推荐
- [LeetCode] Kth Smallest Element in a Sorted Matrix 有序矩阵中第K小的元素
- leetcode 378. Kth Smallest Element in a Sorted Matrix有序矩阵寻找第K小数+二分查找
- lintcode-medium-Kth Smallest Number in Sorted Matrix
- 378. Kth Smallest Element in a Sorted Matrix(查找矩阵中第k小的数)
- LintCode_401 Kth Smallest Number in Sorted Matrix
- 有序矩阵中查找第k小的元素 Kth smallest element in a row-wise and column-wise sorted 2D array
- [Lintcode] Kth Smallest Number in Sorted Matrix
- Lintcode: Kth Smallest Number in Sorted Matrix
- LintCode "Kth Smallest Number in Sorted Matrix"
- 378.leetcode Kth Smallest Element in a Sorted Matrix(medium)[堆求第K小的 ]
- Lintcode401 Kth Smallest Number in Sorted Matrix solution 题解
- [LeetCode] Kth Smallest Number in Multiplication Table 乘法表中的第K小的数字
- Kth Smallest Number in Sorted Matrix
- Kth Smallest Number in Sorted Matrix
- kth-smallest-element-in-a-sorted-matrix
- LeetCode 378. Kth Smallest Element in a Sorted Matrix
- Kth Smallest Element in a Sorted Matrix
- LeetCode 378. Kth Smallest Element in a Sorted Matrix
- LeetCode 378. Kth Smallest Element in a Sorted Matrix
- LeetCode 378. Kth Smallest Element in a Sorted Matrix