【Leetcode】786. K-th Smallest Prime Fraction 786. 第 K 个最小的素数分数
解法
虽然可以用堆来解,但是还是二分搜索比较快
主要是要判断有多少个分数小于mid,并且离mid最接近的那个分数是谁
一开始没想到上界是啥,傻了,上界设成1就行了
class Solution(object):
def kthSmallestPrimeFraction(self, A, K):
"""
:type A: List[int]
:type K: int
:rtype: List[int]
"""
n = len(A)
def guess(m):
a=b=None
c = n
res = 0
for r in xrange(n-1,0,-1):
c = min(c,r-1)
tar = A[r]*m
while c>=0 and A[c]>tar:
c -= 1
res += c+1
if c>=0 and (a==None or a*A[r]<A[c]*b):
a = A[c]
b = A[r]
return res, a,b
l,r = 0,1
while l<r:
mid = (l+r)/2.0
d,a,b = guess(mid)
if d>K:
r = mid
elif d<K:
l = mid
else:
return a,b