给定m * n乘法表的高度m和长度n以及正整数k,则需要返回此表中第k个最小的数字。

来源:互联网 发布:让手机不能安装软件 编辑:程序博客网 时间:2024/05/19 03:21
int findKthNumber(int m, int n, int k) {        int left=1*1;        int right=m*n;        while(left<right){            int mid=(left+right)>>1;            int count=findNum(mid,m,n);            if(count<k){                left=mid+1;            }else{                right=mid;            }        }        return right;    }    int findNum(int val,int m,int n){        int i=m;        int j=1;        int sum=0;        while(i>0 && j<=n){            if(i*j <= val){                sum += i;                j++;            }else{                i--;            }        }        return sum;    }

阅读全文
0 0
原创粉丝点击