class Solution:
def visiblePoints(self, points: List[List[int]], angle: int, location: List[int]) -> int:
sameCnt = 0
polarDegrees = []
for p in points:
if p == location:
# 计算和出发点相同point的个数
sameCnt += 1
else:
polarDegrees.append(atan2(p[1] - location[1], p[0] - location[0]))
polarDegrees.sort()
n = len(polarDegrees)
# 转化成角度
polarDegrees += [deg + 2 * pi for deg in polarDegrees]
degree = angle * pi / 180
# 找到覆盖的最大的点的个数 ,这里的覆盖是指角度的覆盖
# print((bisect_right(polarDegrees, polarDegrees[0] + degree) - 0))
# print((bisect_right(polarDegrees, polarDegrees[1] + degree) - 1))
# print((bisect_right(polarDegrees, polarDegrees[2] + degree) - 2))
maxCnt = max((bisect_right(polarDegrees, polarDegrees[i] + degree) - i for i in range(n)), default=0)
return maxCnt + sameCnt
LeetCode 1610 可见点的最大数目
最新推荐文章于 2025-12-06 07:43:37 发布
该代码实现了一个名为Solution的类,其中的visiblePoints方法计算在特定角度和位置下,从给定点可见的其他点的最大数量。方法首先计算点相对于出发点的角度,然后通过排序和二分查找确定角度覆盖的点的个数。最后返回相同点和覆盖点的总数。
384

被折叠的 条评论
为什么被折叠?



