【刷题篇】有效矩阵中第K小的元素

一、题目

OJ链接
给你一个 n x n 矩阵 matrix ,其中每行和每列元素均按升序排序,找到矩阵中第 k 小的元素。
请注意,它是 排序后 的第 k 小元素,而不是第 k 个 不同 的元素。

你必须找到一个内存复杂度优于 O(n2) 的解决方案。

二、题解

2.1 思路

在这里插入图片描述

2.2 源码

 public static class  Info{
    int num;
    int near;
    public Info(int num, int near) {
        this.num = num;
        this.near = near;
    }
}
    public static Info noMoreNum(int[][] matrix,int value){
        int near=Integer.MIN_VALUE;
        int num=0;
        int N= matrix.length;
        int M=matrix[0].length;
        int row=0;
        int col=M-1;
        while (row<N&&col>=0){
            if(matrix[row][col]<=value){
                near=Math.max(near,matrix[row][col]);
                num+=col+1;
                row++;
            } else {
                col--;
            }
        }
        return new Info(num ,near);
    }


    public int kthSmallest(int[][] matrix, int k) {

        int N= matrix.length;
        int M=matrix[0].length;
        int left=matrix[0][0];
        int right=matrix[N-1][M-1];
        int ans=0;
        while (left<=right){
            int mid=left+((right-left)/2);
            Info info=noMoreNum(matrix,mid);
            if(info.num<k){
                left=mid+1;
            }else {
                ans=info.near;
                right=mid-1;
            }

        }
        return ans;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值