Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 248c0a7

Browse files
feat: add solutions to lc problem: No.1453 (doocs#3395)
1 parent d6aa474 commit 248c0a7

File tree

3 files changed

+209
-5
lines changed

3 files changed

+209
-5
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++

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

Lines changed: 82 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,20 +60,99 @@ tags:
6060

6161
<!-- solution:start -->
6262

63-
### Solution 1
63+
### 方法一
6464

6565
<!-- tabs:start -->
6666

6767
#### Python3
6868

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

73107
#### Java
74108

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

79158
#### C++
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
class Solution {
2+
public int numPoints(int[][] darts, int r) {
3+
int n = darts.length;
4+
int maxDarts = 1;
5+
6+
for (int i = 0; i < n; i++) {
7+
for (int j = i + 1; j < n; j++) {
8+
List<double[]> centers
9+
= possibleCenters(darts[i][0], darts[i][1], darts[j][0], darts[j][1], r);
10+
for (double[] center : centers) {
11+
maxDarts = Math.max(maxDarts, countDarts(center[0], center[1], darts, r));
12+
}
13+
}
14+
}
15+
return maxDarts;
16+
}
17+
18+
private List<double[]> possibleCenters(int x1, int y1, int x2, int y2, int r) {
19+
List<double[]> centers = new ArrayList<>();
20+
double dx = x2 - x1;
21+
double dy = y2 - y1;
22+
double d = Math.sqrt(dx * dx + dy * dy);
23+
if (d > 2 * r) {
24+
return centers;
25+
}
26+
double midX = (x1 + x2) / 2.0;
27+
double midY = (y1 + y2) / 2.0;
28+
double distToCenter = Math.sqrt(r * r - (d / 2.0) * (d / 2.0));
29+
double offsetX = distToCenter * dy / d;
30+
double offsetY = distToCenter * -dx / d;
31+
32+
centers.add(new double[] {midX + offsetX, midY + offsetY});
33+
centers.add(new double[] {midX - offsetX, midY - offsetY});
34+
return centers;
35+
}
36+
37+
private int countDarts(double x, double y, int[][] darts, int r) {
38+
int count = 0;
39+
for (int[] dart : darts) {
40+
if (Math.sqrt(Math.pow(dart[0] - x, 2) + Math.pow(dart[1] - y, 2)) <= r + 1e-7) {
41+
count++;
42+
}
43+
}
44+
return count;
45+
}
46+
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /