【Leetcode】786. K-th Smallest Prime Fraction 786. 第 K 个最小的素数分数

【Leetcode】786. K-th Smallest Prime Fraction 786. 第 K 个最小的素数分数_第1张图片

解法

虽然可以用堆来解,但是还是二分搜索比较快
主要是要判断有多少个分数小于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

你可能感兴趣的:(Leetcode)