leetcode--1828. 统计一个圆中点的数目

  • 题目:给你一个数组 points ,其中 points[i] = [xi, yi] ,表示第 i 个点在二维平面上的坐标。多个点可能会有 相同 的坐标。同时给你一个数组 queries ,其中 queries[j] = [xj, yj, rj] ,表示一个圆心在 (xj, yj) 且半径为 rj 的圆。对于每一个查询 queries[j] ,计算在第 j 个圆 内 点的数目。如果一个点在圆的 边界上 ,我们同样认为它在圆 内 。请你返回一个数组 answer ,其中 answer[j]是第j个查询的答案。1

  • 示例:

# 示例 1
输入:points = [[1,3],[3,3],[5,3],[2,2]], queries = [[2,3,1],[4,3,1],[1,1,2]]
输出:[3,2,2]
解释:所有的点和圆如上图所示。
queries[0] 是绿色的圆,queries[1] 是红色的圆,queries[2] 是蓝色的圆。
# 示例 2
输入:points = [[1,1],[2,2],[3,3],[4,4],[5,5]], queries = [[1,2,2],[2,2,2],[4,3,2],[4,3,3]]
输出:[2,3,2,4]
解释:所有的点和圆如上图所示。
queries[0] 是绿色的圆,queries[1] 是红色的圆,queries[2] 是蓝色的圆,queries[3] 是紫色的圆。
  • 提示:
  1. 1 <= points.length <= 500
  2. points[i].length == 2
  3. 0 <= x​​​​​​i, y​​​​​​i <= 500
  4. 1 <= queries.length <= 500
  5. queries[j].length == 3
  6. 0 <= xj, yj <= 500
  7. 1 <= rj <= 500
  8. 所有的坐标都是整数。
  • 思路:

首先理解题目意思,points是给出的点数的数组;queries也是一个数组,分别有三个值前两个代表圆心,最后一个值表示半径;遍历queries,要判断points中有几个值在这些之中。
定义一个存储计数的列表,遍历queries,定义一个存储符合条件次数,再遍历点数依次判断,根据条件圆心到点的半径要小于等于给出的半径来判断,次数+1,然后再将计算出的次数添加到定义好的列表中
返回count

  • 解法一:
class Solution:
    def countPoints(self, points: List[List[int]], queries: List[List[int]]) -> List[int]:
        count = []
        for i in queries:
            cnt = 0
            for each in points:
                if math.sqrt(abs(each[0] - i[0]) ** 2 + abs(each[1] - i[1]) ** 2) <= i[2]:
                    cnt += 1
            count.append(cnt)
        return count

  1. 来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/queries-on-number-of-points-inside-a-circle ↩︎

你可能感兴趣的:(leetcode,leetcode,统计圆中数目)