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

    Nearly every one have used the Multiplication Table. But could you find out the k-th smallest number quickly from the multiplication table?

    Given the height m and the length n of a m * n Multiplication Table, and a positive integer k, you need to return the k-th smallest number in this table.

    Example 1:

    Input: m = 3, n = 3, k = 5
    Output: 
    Explanation: 
    The Multiplication Table:
    1	2	3
    2	4	6
    3	6	9
    
    The 5-th smallest number is 3 (1, 2, 2, 3, 3).
    

    Example 2:

    Input: m = 2, n = 3, k = 6
    Output: 
    Explanation: 
    The Multiplication Table:
    1	2	3
    2	4	6
    
    The 6-th smallest number is 6 (1, 2, 2, 3, 4, 6).
    

    Note:

    1. The m and n will be in the range [1, 30000].
    2. The k will be in the range [1, m * n]
    Approach: #1 Bianry Serach
    class Solution {
    public:
        int findKthNumber(int m, int n, int k) {
            int l = 1, r = m * n;
            while (l < r) {
                int mid = l + (r - l) / 2;
                if (!bignums(mid, m, n, k)) l = mid + 1;
                else r = mid;
            }
            return l;
        }
    private:
        bool bignums(int x, int m, int n, int k) {
            int count = 0;
            for (int i = 1; i <= m; ++i) {
                count += min(x/i, n);
            }
            return count >= k;
        }
    };
    

    Runtime: 24 ms, faster than 12.44% of C++ online submissions for Kth Smallest Number in Multiplication Table. 

    Analysis:

            for (int i = 1; i <= m; ++i) {
                count += min(x/i, n);
            }

    we use this code to find the numbers of elements less than k , in the row of i  the elements are i, 2*i, 3*i, 4*i, 5*i ........ the largest number is k * i <= x, so the numbers of elements which is less than or equal to x is k = x / i;           

    永远渴望,大智若愚(stay hungry, stay foolish)
  • 相关阅读:
    数据库索引详解
    解决Eclipse中DDMS一直打印输出Connection attempts的问题
    发布一个关于SharePoint的管理小工具
    POJ 2895
    POJ 2909
    2020/6/9 [MRCTF2020]hello_world_go
    2020/5/31 [GKCTF2020]Chelly’s identity
    2020/5/30 [FlareOn6]Overlong
    2020/5/28 BUU_[WUSTCTF2020]level4
    2020/5/25 BUU_[WUSTCTF2020]level3
  • 原文地址:https://www.cnblogs.com/h-hkai/p/9930494.html
Copyright © 2011-2022 走看看