From ed1b7c3f6ad7313b24112f2b9b0ef17a59789e10 Mon Sep 17 00:00:00 2001 From: CodersAcademy006 <104912634+CodersAcademy006@users.noreply.github.com> Date: Sat, 10 Aug 2024 13:13:33 +0530 Subject: [PATCH 1/4] Add Solution.java --- .../Solution.java | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 solution/1400-1499/1453.Maximum Number of Darts Inside of a Circular Dartboard/Solution.java diff --git a/solution/1400-1499/1453.Maximum Number of Darts Inside of a Circular Dartboard/Solution.java b/solution/1400-1499/1453.Maximum Number of Darts Inside of a Circular Dartboard/Solution.java new file mode 100644 index 0000000000000..b4a223811c93d --- /dev/null +++ b/solution/1400-1499/1453.Maximum Number of Darts Inside of a Circular Dartboard/Solution.java @@ -0,0 +1,53 @@ +import java.util.*; + +public class Solution { + public int numPoints(int[][] darts, int r) { + int n = darts.length; + int maxDarts = 1; + + for (int i = 0; i < n; i++) { + for (int j = i + 1; j < n; j++) { + List centers = possibleCenters(darts[i][0], darts[i][1], darts[j][0], darts[j][1], r); + for (double[] center : centers) { + maxDarts = Math.max(maxDarts, countDarts(center[0], center[1], darts, r)); + } + } + } + return maxDarts; + } + + private List possibleCenters(int x1, int y1, int x2, int y2, int r) { + List centers = new ArrayList<>(); + double dx = x2 - x1; + double dy = y2 - y1; + double d = Math.sqrt(dx * dx + dy * dy); + if (d > 2 * r) { + return centers; + } + double midX = (x1 + x2) / 2.0; + double midY = (y1 + y2) / 2.0; + double distToCenter = Math.sqrt(r * r - (d / 2.0) * (d / 2.0)); + double offsetX = distToCenter * dy / d; + double offsetY = distToCenter * -dx / d; + + centers.add(new double[]{midX + offsetX, midY + offsetY}); + centers.add(new double[]{midX - offsetX, midY - offsetY}); + return centers; + } + + private int countDarts(double x, double y, int[][] darts, int r) { + int count = 0; + for (int[] dart : darts) { + if (Math.sqrt(Math.pow(dart[0] - x, 2) + Math.pow(dart[1] - y, 2)) <= r + 1e-7) { + count++; + } + } + return count; + } + + public static void main(String[] args) { + Solution solution = new Solution(); + System.out.println(solution.numPoints(new int[][]{{-2,0},{2,0},{0,2},{0,-2}}, 2)); // Output: 4 + System.out.println(solution.numPoints(new int[][]{{-3,0},{3,0},{2,6},{5,4},{0,9},{7,8}}, 5)); // Output: 5 + } +} From 1a92c96337eb4b919fb452a95b87513ab5fcb017 Mon Sep 17 00:00:00 2001 From: Libin YANG Date: Tue, 13 Aug 2024 10:11:06 +0800 Subject: [PATCH 2/4] Update Solution.java --- .../Solution.java | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/solution/1400-1499/1453.Maximum Number of Darts Inside of a Circular Dartboard/Solution.java b/solution/1400-1499/1453.Maximum Number of Darts Inside of a Circular Dartboard/Solution.java index b4a223811c93d..4c4974a19f1a1 100644 --- a/solution/1400-1499/1453.Maximum Number of Darts Inside of a Circular Dartboard/Solution.java +++ b/solution/1400-1499/1453.Maximum Number of Darts Inside of a Circular Dartboard/Solution.java @@ -1,13 +1,12 @@ -import java.util.*; - -public class Solution { +class Solution { public int numPoints(int[][] darts, int r) { int n = darts.length; int maxDarts = 1; for (int i = 0; i < n; i++) { for (int j = i + 1; j < n; j++) { - List centers = possibleCenters(darts[i][0], darts[i][1], darts[j][0], darts[j][1], r); + List centers + = possibleCenters(darts[i][0], darts[i][1], darts[j][0], darts[j][1], r); for (double[] center : centers) { maxDarts = Math.max(maxDarts, countDarts(center[0], center[1], darts, r)); } @@ -30,8 +29,8 @@ private List possibleCenters(int x1, int y1, int x2, int y2, int r) { double offsetX = distToCenter * dy / d; double offsetY = distToCenter * -dx / d; - centers.add(new double[]{midX + offsetX, midY + offsetY}); - centers.add(new double[]{midX - offsetX, midY - offsetY}); + centers.add(new double[] {midX + offsetX, midY + offsetY}); + centers.add(new double[] {midX - offsetX, midY - offsetY}); return centers; } @@ -44,10 +43,4 @@ private int countDarts(double x, double y, int[][] darts, int r) { } return count; } - - public static void main(String[] args) { - Solution solution = new Solution(); - System.out.println(solution.numPoints(new int[][]{{-2,0},{2,0},{0,2},{0,-2}}, 2)); // Output: 4 - System.out.println(solution.numPoints(new int[][]{{-3,0},{3,0},{2,6},{5,4},{0,9},{7,8}}, 5)); // Output: 5 - } } From 0041fc1dd1aa92080f8f21f32ec8d671044d945c Mon Sep 17 00:00:00 2001 From: Libin YANG Date: Tue, 13 Aug 2024 10:12:43 +0800 Subject: [PATCH 3/4] Update README.md --- .../README.md | 83 ++++++++++++++++++- 1 file changed, 81 insertions(+), 2 deletions(-) diff --git a/solution/1400-1499/1453.Maximum Number of Darts Inside of a Circular Dartboard/README.md b/solution/1400-1499/1453.Maximum Number of Darts Inside of a Circular Dartboard/README.md index be513f0e7edff..393e48170f675 100644 --- a/solution/1400-1499/1453.Maximum Number of Darts Inside of a Circular Dartboard/README.md +++ b/solution/1400-1499/1453.Maximum Number of Darts Inside of a Circular Dartboard/README.md @@ -69,13 +69,92 @@ tags: #### Python3 ```python - +class Solution: + def numPoints(self, darts: list[list[int]], r: int) -> int: + def countDarts(x, y): + count = 0 + for x1, y1 in darts: + if dist((x, y), (x1, y1)) <= r + 1e-7: + count += 1 + return count + + def possibleCenters(x1, y1, x2, y2): + dx, dy = x2 - x1, y2 - y1 + d = sqrt(dx * dx + dy * dy) + if d > 2 * r: + return [] + mid_x, mid_y = (x1 + x2) / 2, (y1 + y2) / 2 + dist_to_center = sqrt(r * r - (d / 2) * (d / 2)) + offset_x = dist_to_center * dy / d + offset_y = dist_to_center * -dx / d + return [ + (mid_x + offset_x, mid_y + offset_y), + (mid_x - offset_x, mid_y - offset_y), + ] + + n = len(darts) + max_darts = 1 + + for i in range(n): + for j in range(i + 1, n): + centers = possibleCenters( + darts[i][0], darts[i][1], darts[j][0], darts[j][1] + ) + for center in centers: + max_darts = max(max_darts, countDarts(center[0], center[1])) + + return max_darts ``` #### Java ```java - +class Solution { + public int numPoints(int[][] darts, int r) { + int n = darts.length; + int maxDarts = 1; + + for (int i = 0; i < n; i++) { + for (int j = i + 1; j < n; j++) { + List centers + = possibleCenters(darts[i][0], darts[i][1], darts[j][0], darts[j][1], r); + for (double[] center : centers) { + maxDarts = Math.max(maxDarts, countDarts(center[0], center[1], darts, r)); + } + } + } + return maxDarts; + } + + private List possibleCenters(int x1, int y1, int x2, int y2, int r) { + List centers = new ArrayList<>(); + double dx = x2 - x1; + double dy = y2 - y1; + double d = Math.sqrt(dx * dx + dy * dy); + if (d > 2 * r) { + return centers; + } + double midX = (x1 + x2) / 2.0; + double midY = (y1 + y2) / 2.0; + double distToCenter = Math.sqrt(r * r - (d / 2.0) * (d / 2.0)); + double offsetX = distToCenter * dy / d; + double offsetY = distToCenter * -dx / d; + + centers.add(new double[] {midX + offsetX, midY + offsetY}); + centers.add(new double[] {midX - offsetX, midY - offsetY}); + return centers; + } + + private int countDarts(double x, double y, int[][] darts, int r) { + int count = 0; + for (int[] dart : darts) { + if (Math.sqrt(Math.pow(dart[0] - x, 2) + Math.pow(dart[1] - y, 2)) <= r + 1e-7) { + count++; + } + } + return count; + } +} ``` #### C++ From c7918b44649396bed832a1afc0fc421462fe3b43 Mon Sep 17 00:00:00 2001 From: Libin YANG Date: Tue, 13 Aug 2024 10:13:02 +0800 Subject: [PATCH 4/4] Update README_EN.md --- .../README_EN.md | 85 ++++++++++++++++++- 1 file changed, 82 insertions(+), 3 deletions(-) diff --git a/solution/1400-1499/1453.Maximum Number of Darts Inside of a Circular Dartboard/README_EN.md b/solution/1400-1499/1453.Maximum Number of Darts Inside of a Circular Dartboard/README_EN.md index da18bb00e9749..db4ce75c1e5b0 100644 --- a/solution/1400-1499/1453.Maximum Number of Darts Inside of a Circular Dartboard/README_EN.md +++ b/solution/1400-1499/1453.Maximum Number of Darts Inside of a Circular Dartboard/README_EN.md @@ -60,20 +60,99 @@ tags: -### Solution 1 +### 方法一 #### Python3 ```python - +class Solution: + def numPoints(self, darts: list[list[int]], r: int) -> int: + def countDarts(x, y): + count = 0 + for x1, y1 in darts: + if dist((x, y), (x1, y1)) <= r + 1e-7: + count += 1 + return count + + def possibleCenters(x1, y1, x2, y2): + dx, dy = x2 - x1, y2 - y1 + d = sqrt(dx * dx + dy * dy) + if d > 2 * r: + return [] + mid_x, mid_y = (x1 + x2) / 2, (y1 + y2) / 2 + dist_to_center = sqrt(r * r - (d / 2) * (d / 2)) + offset_x = dist_to_center * dy / d + offset_y = dist_to_center * -dx / d + return [ + (mid_x + offset_x, mid_y + offset_y), + (mid_x - offset_x, mid_y - offset_y), + ] + + n = len(darts) + max_darts = 1 + + for i in range(n): + for j in range(i + 1, n): + centers = possibleCenters( + darts[i][0], darts[i][1], darts[j][0], darts[j][1] + ) + for center in centers: + max_darts = max(max_darts, countDarts(center[0], center[1])) + + return max_darts ``` #### Java ```java - +class Solution { + public int numPoints(int[][] darts, int r) { + int n = darts.length; + int maxDarts = 1; + + for (int i = 0; i < n; i++) { + for (int j = i + 1; j < n; j++) { + List centers + = possibleCenters(darts[i][0], darts[i][1], darts[j][0], darts[j][1], r); + for (double[] center : centers) { + maxDarts = Math.max(maxDarts, countDarts(center[0], center[1], darts, r)); + } + } + } + return maxDarts; + } + + private List possibleCenters(int x1, int y1, int x2, int y2, int r) { + List centers = new ArrayList<>(); + double dx = x2 - x1; + double dy = y2 - y1; + double d = Math.sqrt(dx * dx + dy * dy); + if (d > 2 * r) { + return centers; + } + double midX = (x1 + x2) / 2.0; + double midY = (y1 + y2) / 2.0; + double distToCenter = Math.sqrt(r * r - (d / 2.0) * (d / 2.0)); + double offsetX = distToCenter * dy / d; + double offsetY = distToCenter * -dx / d; + + centers.add(new double[] {midX + offsetX, midY + offsetY}); + centers.add(new double[] {midX - offsetX, midY - offsetY}); + return centers; + } + + private int countDarts(double x, double y, int[][] darts, int r) { + int count = 0; + for (int[] dart : darts) { + if (Math.sqrt(Math.pow(dart[0] - x, 2) + Math.pow(dart[1] - y, 2)) <= r + 1e-7) { + count++; + } + } + return count; + } +} ``` #### C++