美文网首页
Leetcode #378. Kth Smallest Elem

Leetcode #378. Kth Smallest Elem

作者: 尴尴尬尬先生 | 来源:发表于2017-06-15 16:36 被阅读0次
public int kthSmallest(int[][] matrix, int k) {
        int len = matrix.length;
        int low = matrix[0][0],high= matrix[len-1][len-1];
        while(low<=high){
            int mid = low + (high-low)/2;
            int count = helper(matrix,mid);
            if(count<k) low = mid+1;
            else high = mid-1; //排除mid不在矩阵内的情况,所以只能等到low和high时才退出循环
        }
        return low;
    }
    private static int helper(int[][] matrix, int mid) {
        // TODO Auto-generated method stub
        int i = matrix.length-1,j=0;
        int res = 0;
        while(i>=0&&j<matrix[0].length){
            if(matrix[i][j]>mid) i--;
            else{
                res+=i+1;
                j++;
            }
        }
        return res;
    }

根据二分搜索法,获取中间值,然后搜索他是否为第k个值。
主要中间值不在矩阵内的情况。这就是

if(count<k) low = mid+1;
            else high = mid-1;

这段语句的作用.

相关文章

网友评论

      本文标题:Leetcode #378. Kth Smallest Elem

      本文链接:https://www.haomeiwen.com/subject/qvkuqxtx.html