题目描述:
LeetCode 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:
- The
m
andn
will be in the range [1, 30000]. - The
k
will be in the range [1, m * n]
题目大意:
求m * n乘法表的第k个数
解题思路:
从1到k进行二分枚举,上下界分别为lo, hi,记当前枚举数字为mid
利用O(n)的代价求乘法表中有多少个数字不大于mid,记为count
若count >= k,则令hi = mid - 1
否则,令lo = mid + 1
最后返回lo
Python代码:
class Solution(object):
def findKthNumber(self, m, n, k):
"""
:type m: int
:type n: int
:type k: int
:rtype: int
"""
count = lambda t: sum(min(m, t / x) for x in range(1, n + 1))
lo, hi = 1, k
while lo <= hi:
mid = (lo + hi) / 2
if (count(mid)) >= k:
hi = mid - 1
else:
lo = mid + 1
return lo
本文链接:http://bookshadow.com/weblog/2017/08/30/leetcode-kth-smallest-number-in-multiplication-table/
请尊重作者的劳动成果,转载请注明出处!书影博客保留对文章的所有权利。