diff --git a/problems/kth-smallest-element-in-a-sorted-matrix.cpp b/problems/kth-smallest-element-in-a-sorted-matrix.cpp new file mode 100644 index 0000000..42aceed --- /dev/null +++ b/problems/kth-smallest-element-in-a-sorted-matrix.cpp @@ -0,0 +1,52 @@ +#include +#include +#include +#include + +using namespace std; + +class Solution { +public: + int kthSmallest(vector>& matrix, int k) + { + int low = matrix.front().front(); + int high = matrix.back().back(); + + while (low < high) { + int mid = low + (high - low) / 2; + + int rank = 0; + for (const auto& row : matrix) { + rank += upper_bound(row.begin(), row.end(), mid) - row.begin(); + } + + if (rank < k) { + low = mid + 1; + } else { + high = mid; + } + } + + return low; + } +}; + +int main() +{ + Solution s; + + vector> m; + int k; + + m = { + { 1, 5, 9 }, + { 10, 11, 13 }, + { 12, 13, 15 } + }; + k = 8; + assert(s.kthSmallest(m, k) == 13); + + m = { { -5 } }; + k = 1; + assert(s.kthSmallest(m, k) == -5); +}