困难题:二分查找+乘法表中的第k小的数字
668. 乘法表中第k小的数
一般来讲“第k大”问题会使用优先队列(简单、中等)或者二分(困难)。
本质上来说乘法表中第k小的数字,意思就是前面由k个小于等于它的数;
1 2 3 4 5
2 4 6 8 10
3 6 9 12 15
对于上面的乘法表,
1:1个数小于等于它;
2: 3个数小于等于它;
3:5个数小于等于它;
4:7个数小于等于它;
x: 有j个数小于等于它
依次类推,我们对1, 3, 5, 7....j
进行二分查找,找到对应的x就行了。
真正的问题在于如何使用x,算出j:
例如x=4, 在这个乘法表内
1
2
3
4
5
2
4
6 8 10
3
6 9 12 15
$$
j=\sum_{i=1}^{m} \min \left(\left[\frac{x}{i}\right\rfloor, n\right)
$$