Leetcode-668. Kth Smallest Number in Multiplication Table[C++][Java]
目录
一、题目描述
二、解题思路
【C++】
【Java】
Leetcode-668. Kth Smallest Number in Multiplication Tablehttps://leetcode.com/problems/kth-smallest-number-in-multiplication-table/description/
一、题目描述
Nearly everyone has used the Multiplication Table. The multiplication table of size m x n
is an integer matrix mat
where mat[i][j] == i * j
(1-indexed).
Given three integers m
, n
, and k
, return the kth
smallest element in the m x n
multiplication table.
Example 1:
Input: m = 3, n = 3, k = 5 Output: 3 Explanation: The 5th smallest number is 3.
Example 2:
Input: m = 2, n = 3, k = 6 Output: 6 Explanation: The 6th smallest number is 6.
Constraints:
1 <= m, n <= 3 * 104
1 <= k <= m * n
二、解题思路
二分查找
- 总时间复杂度为
O(m * log(m * n))
- 空间复杂度为
O(1)
【C++】
class Solution {
public:
int findKthNumber(int m, int n, int k) {
int left = 1, right = m * n;
while (left < right) {
int mid = left + (right - left) / 2;
int count = 0;
for (int i = 1; i <= m; ++i) {
count += min(mid / i, n);
}
if (count < k) {
left = mid + 1;
} else {
right = mid;
}
}
return left;
}
};
【Java】
class Solution {
public int findKthNumber(int m, int n, int k) {
int left = 1, right = m * n;
while (left < right) {
int mid = left + (right - left) / 2;
int count = 0;
for (int i = 1; i <= m; i++) {
count += Math.min(mid / i, n);
}
if (count < k) {
left = mid + 1;
} else {
right = mid;
}
}
return left;
}
}