@@ -60,20 +60,99 @@ tags:
60
60
61
61
<!-- solution:start -->
62
62
63
- ### Solution 1
63
+ ### 方法一
64
64
65
65
<!-- tabs:start -->
66
66
67
67
#### Python3
68
68
69
69
``` 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
71
105
```
72
106
73
107
#### Java
74
108
75
109
``` 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
+ }
77
156
```
78
157
79
158
#### C++
0 commit comments