Skip to content

Latest commit

 

History

History
 
 

786.K-th Smallest-Prime-Fraction

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 

786.K-th Smallest-Prime-Fraction

此题和 774 Minimize Max Distance to Gas Station 非常类似,用二分法的思想非常巧妙。

在所有的候选分数中,第K个数会是什么呢?假设是M。我们如果想试探一个M是否成立的话,需要计算所有小于等于M的分数的个数。显然,这个是可以计算出来的:只要遍历所有的nums的元素作为分子,可以很快在nums里确定对应的临界分母,使得分数小于等于M。因此count+=数组里大于等于这个临界分母的个数

另外考虑,M一定会有下界A[0]/A[n-1];其次它也有上界,存在于所有的相邻两个数所组成的分数A[i-1]/A[i]中的一个。PS:粗糙一点,直接设置上下姐是(0,1)的话也没有问题。

于是二分夹逼的思路就呼之欲出了。根据left,right,得到mid,试探小于等于mid的分数的个数,并以此相应更新leftright。最后得到的mid,表示小于等于mid的分数个数恰好为K

有了这个mid,再遍历一遍nums的所有元素作为分子,找到对应的临界分母。取出所有“分子/分母”里最接近mid的那个就是最终答案。

Leetcode Link