378. 有序矩阵中第K小的元素(力扣、二分)

 

思路非常简单:转自https://leetcode-cn.com/problems/kth-smallest-element-in-a-sorted-matrix/solution/er-fen-chao-ji-jian-dan-by-jacksu1024/
1.找出二维矩阵中最小的数left,最大的数right,那么第k小的数必定在left~right之间
2.mid=(left+right) / 2;在二维矩阵中寻找小于等于mid的元素个数count
3.若这个count小于k,表明第k小的数在右半部分且不包含mid,即left=mid+1, right=right,又保证了第k小的数在left~right之间
4.若这个count大于k,表明第k小的数在左半部分且可能包含mid,即left=left, right=mid,又保证了第k小的数在left~right之间
5.因为每次循环中都保证了第k小的数在left~right之间,当left==right时,第k小的数即被找出,等于right

注意:这里的left mid right是数值,不是索引位置。

作者:jacksu1024
链接:https://leetcode-cn.com/problems/kth-smallest-element-in-a-sorted-matrix/solution/er-fen-chao-ji-jian-dan-by-jacksu1024/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

class Solution {
public:
    int cc(vector>& matrix, int k){

        int n=matrix.size();
        int i=0,j=n-1;
        int ans=0;
        while(i=0)
        {
            while(j>=0&&matrix[i][j]>k){
                j--;
            }
            if(j==0&&matrix[i][j]>& matrix, int k) {
        
        int n=matrix.size();
        int l=matrix[0][0];
        int r=matrix[n-1][n-1];

        while(l

 

你可能感兴趣的:(leetcode)