Skip to content

Commit 0041fc1

Browse files
authored
Update README.md
1 parent 1a92c96 commit 0041fc1

File tree

1 file changed

+81
-2
lines changed
  • solution/1400-1499/1453.Maximum Number of Darts Inside of a Circular Dartboard

1 file changed

+81
-2
lines changed

solution/1400-1499/1453.Maximum Number of Darts Inside of a Circular Dartboard/README.md

Lines changed: 81 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,13 +69,92 @@ tags:
6969
#### Python3
7070

7171
```python
72-
72+
class Solution:
73+
def numPoints(self, darts: list[list[int]], r: int) -> int:
74+
def countDarts(x, y):
75+
count = 0
76+
for x1, y1 in darts:
77+
if dist((x, y), (x1, y1)) <= r + 1e-7:
78+
count += 1
79+
return count
80+
81+
def possibleCenters(x1, y1, x2, y2):
82+
dx, dy = x2 - x1, y2 - y1
83+
d = sqrt(dx * dx + dy * dy)
84+
if d > 2 * r:
85+
return []
86+
mid_x, mid_y = (x1 + x2) / 2, (y1 + y2) / 2
87+
dist_to_center = sqrt(r * r - (d / 2) * (d / 2))
88+
offset_x = dist_to_center * dy / d
89+
offset_y = dist_to_center * -dx / d
90+
return [
91+
(mid_x + offset_x, mid_y + offset_y),
92+
(mid_x - offset_x, mid_y - offset_y),
93+
]
94+
95+
n = len(darts)
96+
max_darts = 1
97+
98+
for i in range(n):
99+
for j in range(i + 1, n):
100+
centers = possibleCenters(
101+
darts[i][0], darts[i][1], darts[j][0], darts[j][1]
102+
)
103+
for center in centers:
104+
max_darts = max(max_darts, countDarts(center[0], center[1]))
105+
106+
return max_darts
73107
```
74108

75109
#### Java
76110

77111
```java
78-
112+
class Solution {
113+
public int numPoints(int[][] darts, int r) {
114+
int n = darts.length;
115+
int maxDarts = 1;
116+
117+
for (int i = 0; i < n; i++) {
118+
for (int j = i + 1; j < n; j++) {
119+
List<double[]> centers
120+
= possibleCenters(darts[i][0], darts[i][1], darts[j][0], darts[j][1], r);
121+
for (double[] center : centers) {
122+
maxDarts = Math.max(maxDarts, countDarts(center[0], center[1], darts, r));
123+
}
124+
}
125+
}
126+
return maxDarts;
127+
}
128+
129+
private List<double[]> possibleCenters(int x1, int y1, int x2, int y2, int r) {
130+
List<double[]> centers = new ArrayList<>();
131+
double dx = x2 - x1;
132+
double dy = y2 - y1;
133+
double d = Math.sqrt(dx * dx + dy * dy);
134+
if (d > 2 * r) {
135+
return centers;
136+
}
137+
double midX = (x1 + x2) / 2.0;
138+
double midY = (y1 + y2) / 2.0;
139+
double distToCenter = Math.sqrt(r * r - (d / 2.0) * (d / 2.0));
140+
double offsetX = distToCenter * dy / d;
141+
double offsetY = distToCenter * -dx / d;
142+
143+
centers.add(new double[] {midX + offsetX, midY + offsetY});
144+
centers.add(new double[] {midX - offsetX, midY - offsetY});
145+
return centers;
146+
}
147+
148+
private int countDarts(double x, double y, int[][] darts, int r) {
149+
int count = 0;
150+
for (int[] dart : darts) {
151+
if (Math.sqrt(Math.pow(dart[0] - x, 2) + Math.pow(dart[1] - y, 2)) <= r + 1e-7) {
152+
count++;
153+
}
154+
}
155+
return count;
156+
}
157+
}
79158
```
80159

81160
#### C++

0 commit comments

Comments
 (0)