leetcode668+乘法表第K小的数字,使用最大堆或者二分

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013554860/article/details/83715099

https://leetcode.com/problems/kth-smallest-number-in-multiplication-table/description/

class Solution {
public:
    int findKthNumber(int m, int n, int k) {
        if(m<n) swap(m, n);
        int left = 1, right= k;
        while (left!=right) {
            int x =0, mid = (left+right)/2;
            for(int i=1; i<=n&&i<=mid; i++){
                if(mid/i<m) x+=(mid/i);
                else x+=m;
            }
            if(x>=k) right = mid;
            else left = mid+1;
        }
        for(;left>0; left--){
            for(int i=1; i<=n; i++){
                if(left%i==0&&left/i<=m) return left;
            }
        }
    }
};

猜你喜欢

转载自blog.csdn.net/u013554860/article/details/83715099
今日推荐