程式語言 - LeetCode - C++ - 378. Kth Smallest Element in a Sorted Matrix



參考資訊:
https://www.cnblogs.com/grandyang/p/5727892.html

題目:


解答:

class Solution {
public:
    int kthSmallest(vector<vector<int>>& matrix, int k) {
        int l = matrix[0][0];
        int r = matrix.back().back();

        auto less_cnt = [&](int m) {
            int i = matrix.size() - 1;
            int j = 0;
            int n = matrix[0].size();
            int cnt = 0;

            while (i >= 0 && j < n) {
                if (matrix[i][j] <= m) {
                    cnt += i + 1;
                    j += 1;
                }
                else {
                    i -= 1;
                }
            }

            return cnt;
        };
        
        while (l < r) {
            int m = l + ((r - l) >> 1);

            int c = less_cnt(m);
            if (c < k) {
                l = m + 1;
            }
            else {
                r = m;
            }
        }

        return l;
    }
};