You are given an array points where points[i] = [xi, yi] is the coordinates of the ith point on a 2D plane. Multiple points can have the same coordinates.
You are also given an array queries where queries[j] = [xj, yj, rj] describes a circle centered at (xj, yj) with a radius of rj.
For each query queries[j], compute the number of points inside the jth circle. Points on the border of the circle are considered inside.
Return an array answer, where answer[j] is the answer to the jth query.
Example 1:
Input: points = [[1,3],[3,3],[5,3],[2,2]], queries = [[2,3,1],[4,3,1],[1,1,2]]
Output: [3,2,2]
Explanation: The points and circles are shown above.
queries[0] is the green circle, queries[1] is the red circle, and queries[2] is the blue circle.
Example 2:
Input: points = [[1,1],[2,2],[3,3],[4,4],[5,5]], queries = [[1,2,2],[2,2,2],[4,3,2],[4,3,3]]
Output: [2,3,2,4]
Explanation: The points and circles are shown above.
queries[0] is green, queries[1] is red, queries[2] is blue, and queries[3] is purple.
Constraints:
1 <= points.length <= 500
points[i].length == 2
0 <= xi, yi <= 500
1 <= queries.length <= 500
queries[j].length == 3
0 <= xj, yj <= 500
1 <= rj <= 500
All coordinates are integers.
Follow up: Could you find the answer for each query in better complexity than O(n)?
Solutions
Solution 1: Enumeration
Enumerate all the circles \((x, y, r)\). For each circle, calculate the number of points within the circle to get the answer.
The time complexity is \(O(m \times n)\), where \(m\) and \(n\) are the lengths of the arrays queries and points respectively. Ignoring the space consumption of the answer, the space complexity is \(O(1)\).
/** * Note: The returned array must be malloced, assume caller calls free(). */int*countPoints(int**points,intpointsSize,int*pointsColSize,int**queries,intqueriesSize,int*queriesColSize,int*returnSize){int*ans=malloc(sizeof(int)*queriesSize);for(inti=0;i<queriesSize;i++){intcx=queries[i][0];intcy=queries[i][1];intr=queries[i][2];intcount=0;for(intj=0;j<pointsSize;j++){if(sqrt(pow(points[j][0]-cx,2)+pow(points[j][1]-cy,2))<=r){count++;}}ans[i]=count;}*returnSize=queriesSize;returnans;}