leetcode-189周赛-1453-圆形靶内的最大飞镖数量

 

 

 方法一:

来自讨论区 https://leetcode-cn.com/circle/discuss/Z2oiVE/

class Solution:
    def numPoints(self, p: List[List[int]], r: int) -> int:
        eps = 1e-8
        def dist(p1,p2):
            return ((p1[0]-p2[0]) ** 2 + (p1[1]-p2[1])**2)**0.5
        def getCircleCenter(p1,p2):
            mid = ((p1[0]+p2[0])/2,(p1[1]+p2[1])/2)
            angle = math.atan2(p1[0]-p2[0],p2[1]-p1[1]);
            d = (r*r-pow(dist(p1,mid),2))**0.5
            return (mid[0]+d*math.cos(angle),mid[1]+d*math.sin(angle))

        N = len(p)
        ans = 1
        for i in range(N):
            for j in range(i+1, N):
                if dist(p[i],p[j]) > 2*r : continue
                center = getCircleCenter(p[i],p[j])
                cnt = 0
                for k in range(N):
                    if dist(center,p[k]) < 1.0*r+eps: cnt+=1
                ans = max(ans,cnt)
        return ans

猜你喜欢

转载自www.cnblogs.com/oldby/p/12919216.html
今日推荐