Skip to content

Commit 3a149bf

Browse files
committed
feat: add solutions to lc problem: No.1828
No.1828.Queries on Number of Points Inside a Circle
1 parent a2ee7be commit 3a149bf

File tree

7 files changed

+109
-106
lines changed

7 files changed

+109
-106
lines changed

solution/1800-1899/1826.Faulty Sensor/README.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,14 @@
6060

6161
<!-- 这里可写通用的实现逻辑 -->
6262

63+
**方法一:遍历**
64+
65+
遍历两个数组,找到第一个不相等的位置 $i$。如果 $i \lt n - 1$,循环比较 $sensor1[i + 1]$ 和 $sensor2[i]$,如果不相等,说明传感器 $1$ 有缺陷,返回 $1$;否则比较 $sensor1[i]$ 和 $sensor2[i + 1]$,如果不相等,说明传感器 $2$ 有缺陷,返回 $2$。
66+
67+
遍历结束,说明无法确定有缺陷的传感器,返回 $-1$。
68+
69+
时间复杂度 $O(n)$,空间复杂度 $O(1)$。其中 $n$ 为数组长度。
70+
6371
<!-- tabs:start -->
6472

6573
### **Python3**

solution/1800-1899/1828.Queries on Number of Points Inside a Circle/README.md

Lines changed: 37 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,11 @@ queries[0] 是绿色的圆,queries[1] 是红色的圆,queries[2] 是蓝色
5151

5252
<!-- 这里可写通用的实现逻辑 -->
5353

54-
计算每个点与每个圆的圆心之间的距离,若距离小于此圆的半径,说明该点在圆中。
54+
**方法一:枚举**
55+
56+
枚举所有的圆点 $(x, y, r)$,对于每个圆点,计算在圆内的点的个数,即可得到答案。
57+
58+
时间复杂度 $O(m \times n)$,其中 $m$ 和 n$ 分别为圆点的个数和点的个数。忽略答案的空间消耗,空间复杂度 $O(1)$。
5559

5660
<!-- tabs:start -->
5761

@@ -65,13 +69,12 @@ class Solution:
6569
self, points: List[List[int]], queries: List[List[int]]
6670
) -> List[int]:
6771
ans = []
68-
for x0, y0, r in queries:
69-
count = 0
70-
for x, y in points:
71-
dx, dy = x - x0, y - y0
72-
if dx * dx + dy * dy <= r * r:
73-
count += 1
74-
ans.append(count)
72+
for x, y, r in queries:
73+
cnt = 0
74+
for i, j in points:
75+
dx, dy = i - x, j - y
76+
cnt += dx * dx + dy * dy <= r * r
77+
ans.append(cnt)
7578
return ans
7679
```
7780

@@ -82,18 +85,17 @@ class Solution:
8285
```java
8386
class Solution {
8487
public int[] countPoints(int[][] points, int[][] queries) {
85-
int[] ans = new int[queries.length];
86-
int i = 0;
87-
for (int[] query : queries) {
88-
int x0 = query[0], y0 = query[1], r = query[2];
89-
for (int[] point : points) {
90-
int x = point[0], y = point[1];
91-
int dx = x - x0, dy = y - y0;
88+
int m = queries.length;
89+
int[] ans = new int[m];
90+
for (int k = 0; k < m; ++k) {
91+
int x = queries[k][0], y = queries[k][1], r = queries[k][2];
92+
for (var p : points) {
93+
int i = p[0], j = p[1];
94+
int dx = i - x, dy = j - y;
9295
if (dx * dx + dy * dy <= r * r) {
93-
++ans[i];
96+
++ans[k];
9497
}
9598
}
96-
++i;
9799
}
98100
return ans;
99101
}
@@ -107,17 +109,15 @@ class Solution {
107109
public:
108110
vector<int> countPoints(vector<vector<int>>& points, vector<vector<int>>& queries) {
109111
vector<int> ans;
110-
for (auto& query : queries) {
111-
int x0 = query[0], y0 = query[1], r = query[2];
112-
int count = 0;
113-
for (auto& point : points) {
114-
int x = point[0], y = point[1];
115-
int dx = x - x0, dy = y - y0;
116-
if (dx * dx + dy * dy <= r * r) {
117-
++count;
118-
}
112+
for (auto& q : queries) {
113+
int x = q[0], y = q[1], r = q[2];
114+
int cnt = 0;
115+
for (auto& p : points) {
116+
int i = p[0], j = p[1];
117+
int dx = i - x, dy = j - y;
118+
cnt += dx * dx + dy * dy <= r * r;
119119
}
120-
ans.push_back(count);
120+
ans.emplace_back(cnt);
121121
}
122122
return ans;
123123
}
@@ -127,19 +127,20 @@ public:
127127
### **Go**
128128
129129
```go
130-
func countPoints(points [][]int, queries [][]int) []int {
131-
ans := make([]int, len(queries))
132-
for i, query := range queries {
133-
x0, y0, r := query[0], query[1], query[2]
134-
for _, point := range points {
135-
x, y := point[0], point[1]
136-
dx, dy := x-x0, y-y0
130+
func countPoints(points [][]int, queries [][]int) (ans []int) {
131+
for _, q := range queries {
132+
x, y, r := q[0], q[1], q[2]
133+
cnt := 0
134+
for _, p := range points {
135+
i, j := p[0], p[1]
136+
dx, dy := i-x, j-y
137137
if dx*dx+dy*dy <= r*r {
138-
ans[i]++
138+
cnt++
139139
}
140140
}
141+
ans = append(ans, cnt)
141142
}
142-
return ans
143+
return
143144
}
144145
```
145146

solution/1800-1899/1828.Queries on Number of Points Inside a Circle/README_EN.md

Lines changed: 32 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -60,13 +60,12 @@ class Solution:
6060
self, points: List[List[int]], queries: List[List[int]]
6161
) -> List[int]:
6262
ans = []
63-
for x0, y0, r in queries:
64-
count = 0
65-
for x, y in points:
66-
dx, dy = x - x0, y - y0
67-
if dx * dx + dy * dy <= r * r:
68-
count += 1
69-
ans.append(count)
63+
for x, y, r in queries:
64+
cnt = 0
65+
for i, j in points:
66+
dx, dy = i - x, j - y
67+
cnt += dx * dx + dy * dy <= r * r
68+
ans.append(cnt)
7069
return ans
7170
```
7271

@@ -75,18 +74,17 @@ class Solution:
7574
```java
7675
class Solution {
7776
public int[] countPoints(int[][] points, int[][] queries) {
78-
int[] ans = new int[queries.length];
79-
int i = 0;
80-
for (int[] query : queries) {
81-
int x0 = query[0], y0 = query[1], r = query[2];
82-
for (int[] point : points) {
83-
int x = point[0], y = point[1];
84-
int dx = x - x0, dy = y - y0;
77+
int m = queries.length;
78+
int[] ans = new int[m];
79+
for (int k = 0; k < m; ++k) {
80+
int x = queries[k][0], y = queries[k][1], r = queries[k][2];
81+
for (var p : points) {
82+
int i = p[0], j = p[1];
83+
int dx = i - x, dy = j - y;
8584
if (dx * dx + dy * dy <= r * r) {
86-
++ans[i];
85+
++ans[k];
8786
}
8887
}
89-
++i;
9088
}
9189
return ans;
9290
}
@@ -100,17 +98,15 @@ class Solution {
10098
public:
10199
vector<int> countPoints(vector<vector<int>>& points, vector<vector<int>>& queries) {
102100
vector<int> ans;
103-
for (auto& query : queries) {
104-
int x0 = query[0], y0 = query[1], r = query[2];
105-
int count = 0;
106-
for (auto& point : points) {
107-
int x = point[0], y = point[1];
108-
int dx = x - x0, dy = y - y0;
109-
if (dx * dx + dy * dy <= r * r) {
110-
++count;
111-
}
101+
for (auto& q : queries) {
102+
int x = q[0], y = q[1], r = q[2];
103+
int cnt = 0;
104+
for (auto& p : points) {
105+
int i = p[0], j = p[1];
106+
int dx = i - x, dy = j - y;
107+
cnt += dx * dx + dy * dy <= r * r;
112108
}
113-
ans.push_back(count);
109+
ans.emplace_back(cnt);
114110
}
115111
return ans;
116112
}
@@ -120,19 +116,20 @@ public:
120116
### **Go**
121117
122118
```go
123-
func countPoints(points [][]int, queries [][]int) []int {
124-
ans := make([]int, len(queries))
125-
for i, query := range queries {
126-
x0, y0, r := query[0], query[1], query[2]
127-
for _, point := range points {
128-
x, y := point[0], point[1]
129-
dx, dy := x-x0, y-y0
119+
func countPoints(points [][]int, queries [][]int) (ans []int) {
120+
for _, q := range queries {
121+
x, y, r := q[0], q[1], q[2]
122+
cnt := 0
123+
for _, p := range points {
124+
i, j := p[0], p[1]
125+
dx, dy := i-x, j-y
130126
if dx*dx+dy*dy <= r*r {
131-
ans[i]++
127+
cnt++
132128
}
133129
}
130+
ans = append(ans, cnt)
134131
}
135-
return ans
132+
return
136133
}
137134
```
138135

solution/1800-1899/1828.Queries on Number of Points Inside a Circle/Solution.cpp

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,15 @@ class Solution {
22
public:
33
vector<int> countPoints(vector<vector<int>>& points, vector<vector<int>>& queries) {
44
vector<int> ans;
5-
for (auto& query : queries) {
6-
int x0 = query[0], y0 = query[1], r = query[2];
7-
int count = 0;
8-
for (auto& point : points) {
9-
int x = point[0], y = point[1];
10-
int dx = x - x0, dy = y - y0;
11-
if (dx * dx + dy * dy <= r * r) {
12-
++count;
13-
}
5+
for (auto& q : queries) {
6+
int x = q[0], y = q[1], r = q[2];
7+
int cnt = 0;
8+
for (auto& p : points) {
9+
int i = p[0], j = p[1];
10+
int dx = i - x, dy = j - y;
11+
cnt += dx * dx + dy * dy <= r * r;
1412
}
15-
ans.push_back(count);
13+
ans.emplace_back(cnt);
1614
}
1715
return ans;
1816
}
Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
1-
func countPoints(points [][]int, queries [][]int) []int {
2-
ans := make([]int, len(queries))
3-
for i, query := range queries {
4-
x0, y0, r := query[0], query[1], query[2]
5-
for _, point := range points {
6-
x, y := point[0], point[1]
7-
dx, dy := x-x0, y-y0
1+
func countPoints(points [][]int, queries [][]int) (ans []int) {
2+
for _, q := range queries {
3+
x, y, r := q[0], q[1], q[2]
4+
cnt := 0
5+
for _, p := range points {
6+
i, j := p[0], p[1]
7+
dx, dy := i-x, j-y
88
if dx*dx+dy*dy <= r*r {
9-
ans[i]++
9+
cnt++
1010
}
1111
}
12+
ans = append(ans, cnt)
1213
}
13-
return ans
14+
return
1415
}

solution/1800-1899/1828.Queries on Number of Points Inside a Circle/Solution.java

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,16 @@
11
class Solution {
22
public int[] countPoints(int[][] points, int[][] queries) {
3-
int[] ans = new int[queries.length];
4-
int i = 0;
5-
for (int[] query : queries) {
6-
int x0 = query[0], y0 = query[1], r = query[2];
7-
for (int[] point : points) {
8-
int x = point[0], y = point[1];
9-
int dx = x - x0, dy = y - y0;
3+
int m = queries.length;
4+
int[] ans = new int[m];
5+
for (int k = 0; k < m; ++k) {
6+
int x = queries[k][0], y = queries[k][1], r = queries[k][2];
7+
for (var p : points) {
8+
int i = p[0], j = p[1];
9+
int dx = i - x, dy = j - y;
1010
if (dx * dx + dy * dy <= r * r) {
11-
++ans[i];
11+
++ans[k];
1212
}
1313
}
14-
++i;
1514
}
1615
return ans;
1716
}

solution/1800-1899/1828.Queries on Number of Points Inside a Circle/Solution.py

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,10 @@ def countPoints(
33
self, points: List[List[int]], queries: List[List[int]]
44
) -> List[int]:
55
ans = []
6-
for x0, y0, r in queries:
7-
count = 0
8-
for x, y in points:
9-
dx, dy = x - x0, y - y0
10-
if dx * dx + dy * dy <= r * r:
11-
count += 1
12-
ans.append(count)
6+
for x, y, r in queries:
7+
cnt = 0
8+
for i, j in points:
9+
dx, dy = i - x, j - y
10+
cnt += dx * dx + dy * dy <= r * r
11+
ans.append(cnt)
1312
return ans

0 commit comments

Comments
 (0)