668. Kth Smallest Number in Multiplication Table
by Botao Xiao
668. Kth Smallest Number in Multiplication Table
Question
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 and n will be in the range [1, 30000].
- The k will be in the range [1, m * n]
Solution
- Method 1: binary search
class Solution { public int findKthNumber(int m, int n, int k) { int low = 1, high = m * n; while(low <= high){ int mid = low + (high - low) / 2; int count = getLowerNum(m, n, mid); if(count < k) low = mid + 1; else high = mid - 1; } return low; } private int getLowerNum(int m, int n, int target){ int row = m - 1, col = 0; int res = 0; while(row >= 0 && col < n){ if((row + 1) * (col + 1) > target) row--; else{ res += row + 1; col++; } } return res; } }
Subscribe via RSS