问题描述:
给你一个数组 points ,其中 points[i] = [xi, yi] ,表示第 i 个点在二维平面上的坐标。多个点可能会有 相同 的坐标。
同时给你一个数组 queries ,其中 queries[j] = [xj, yj, rj] ,表示一个圆心在 (xj, yj) 且半径为 rj 的圆。
对于每一个查询 queries[j] ,计算在第 j 个圆 内 点的数目。如果一个点在圆的 边界上 ,我们同样认为它在圆内 。
请你返回一个数组 answer ,其中 answer[j]是第 j 个查询的答案。
样例入下:
代码如下(思路见注释):
import java.util.Arrays;
public class CountPoints {
//给你一个数组 points ,其中 points[i] = [xi, yi] ,表示第 i 个点在二维平面上的坐标。多个点可能会有 相同 的坐标。
//同时给你一个数组 queries ,其中 queries[j] = [xj, yj, rj] ,表示一个圆心在 (xj, yj) 且半径为 rj 的圆。
//对于每一个查询 queries[j] ,计算在第 j 个圆 内 点的数目。如果一个点在圆的 边界上 ,我们同样认为它在圆 内 。
//请你返回一个数组 answer ,其中 answer[j]是第 j 个查询的答案。
public static int[] countPoints(int[][] points, int[][] queries) {
int[] ans = new int[queries.length];
for (int i = 0; i < queries.length; i++) {
int count = 0;
//只需要判断其两点之间的距离小于半径即可
for (int[] point : points) {
if (Math.pow(point[0] - queries[i][0], 2) + Math.pow(point[1] - queries[i][1], 2) <= Math.pow(queries[i][2], 2)) {
count++;
}
}
ans[i] = count;
}
return ans;
}
public static void main(String[] args) {
System.out.println(Arrays.toString(countPoints(new int[][]{{1,3},{3,3},{5,3},{2,2}},new int[][]{{2,3,1},{4,3,1},{1,1,2}})));
System.out.println(Arrays.toString(countPoints(new int[][]{{1,1},{3,3},{4,4},{2,2},{5,5}},new int[][]{{1,2,2},{2,2,2},{4,3,2}})));
}
}
结果如下: