zoukankan      html  css  js  c++  java
  • [Leetcode]668.Kth Smallest Number in Multiplication Table

    链接:LeetCode668

    给定高度m 、宽度n 的一张 m * n的乘法表,以及正整数k,你需要返回表中第k 小的数字。

    例 1:

    输入: m = 3, n = 3, k = 5
    输出: 3
    解释:
    乘法表:
    1 2 3
    2 4 6
    3 6 9

    第5小的数字是 3 (1, 2, 2, 3, 3).

    相关标签:二分查找

    乘法表的特点是每行和每列元素均按升序排序,这题就可以转换为[LeetCode]378.Kth Smallest Element in a Sorted Matrix。我们通过二分查找不断逼近真实值即可。
    代码如下:

    python:

    class Solution:
        def findKthNumber(self, m: int, n: int, k: int) -> int:
            lo, hi = 1, m*n
            while lo <= hi:
                mid = (lo + hi) >> 1
                loc = self.countLower(m,n, mid)
                if loc < k:
                    lo = mid + 1
                else:
                    hi = mid - 1
            return lo
    
        def countLower(self, m,n, num):
            i, j = 1,n
            cnt = 0
            while i <= m and j >= 1:
                if i*j <= num:
                    cnt += j
                    i += 1
                else:
                    j -= 1
            return cnt
    

    C++:

    class Solution {
    public:
        int findKthNumber(int m, int n, int k) {
            int lo=1,hi=m*n;
            while(lo<=hi){
                mid = lo+((hi-lo)>>1);
                cnt = countSamller(m,n,mid);
                if(k <= cnt){
                    hi = mid-1;
                } else {
                    lo = mid+1;
                }
            }
            return lo;
        }
    
        int countSamller(int m,int n,int target){
            int i=1,j=n;
            int cnt = 0;
            while(i<=m && j>=1){
                if(target<(i*j)){
                    j--;
                }else{
                    cnt += j;
                    i++;
                }
            }
            return cnt;
        }
    };
    
  • 相关阅读:
    UVa 541 Error Correction
    UVa 11045 My T-shirt suits me
    【模板】Ford-Fulkerson算法
    POJ 1273 Drainage Ditches
    UVa 10158 War
    UVa 658 It's not a Bug, it's a Feature!
    【模板】并查集
    【模板】Floyd-Warshall算法
    UVa 10034 Freckles
    UVa 10048 Audiophobia
  • 原文地址:https://www.cnblogs.com/hellojamest/p/12254695.html
Copyright © 2011-2022 走看看