@@ -69,13 +69,92 @@ tags:
69
69
#### Python3
70
70
71
71
``` 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
73
107
```
74
108
75
109
#### Java
76
110
77
111
``` 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
+ }
79
158
```
80
159
81
160
#### C++
0 commit comments