Skip to content

Commit a094a87

Browse files
Create 3143. 正方形中的最多点数.md
1 parent dd21f53 commit a094a87

File tree

1 file changed

+99
-0
lines changed

1 file changed

+99
-0
lines changed
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
#### 3143. 正方形中的最多点数
2+
3+
难度:中等
4+
5+
---
6+
7+
给你一个二维数组 `points` 和一个字符串 `s` ,其中 `points[i]` 表示第 `i` 个点的坐标,`s[i]` 表示第 `i` 个点的 **标签**  。
8+
9+
如果一个正方形的中心在 `(0, 0)` ,所有边都平行于坐标轴,且正方形内  ****  存在标签相同的两个点,那么我们称这个正方形是  **合法**  的。
10+
11+
请你返回 **合法**  正方形中可以包含的 **最多**  点数。
12+
13+
**注意:**
14+
15+
* 如果一个点位于正方形的边上或者在边以内,则认为该点位于正方形内。
16+
* 正方形的边长可以为零。
17+
18+
**示例 1:**
19+
20+
![](https://assets.leetcode.com/uploads/2024/03/29/3708-tc1.png)
21+
22+
**输入:**points = \[\[2,2\],\[-1,-2\],\[-4,4\],\[-3,1\],\[3,-3\]\], s = "abdca"
23+
24+
**输出:**2
25+
26+
**解释:**
27+
28+
边长为 4 的正方形包含两个点 `points[0]` 和 `points[1]` 。
29+
30+
**示例 2:**
31+
32+
![](https://assets.leetcode.com/uploads/2024/03/29/3708-tc2.png)
33+
34+
**输入:**points = \[\[1,1\],\[-2,-2\],\[-2,2\]\], s = "abb"
35+
36+
**输出:**1
37+
38+
**解释:**
39+
40+
边长为 2 的正方形包含 1 个点 `points[0]` 。
41+
42+
**示例 3:**
43+
44+
**输入:**points = \[\[1,1\],\[-1,-1\],\[2,-2\]\], s = "ccd"
45+
46+
**输出:**0
47+
48+
**解释:**
49+
50+
任何正方形都无法只包含 `points[0]` 和 `points[1]` 中的一个点,所以合法正方形中都不包含任何点。
51+
52+
**提示:**
53+
54+
* `1 <= s.length, points.length <= 10^5`
55+
* `points[i].length == 2`
56+
* `-10^9 <= points[i][0], points[i][1] <= 10^9`
57+
* `s.length == points.length`
58+
* `points` 中的点坐标互不相同。
59+
* `s` 只包含小写英文字母。
60+
61+
---
62+
63+
维护次小半径:
64+
65+
遍历所有坐标,记录所有标签的次小半径,最后统计**各个标签的最小半径**小于**次小半径**的个数
66+
67+
```Go
68+
func maxPointsInsideSquare(points [][]int, s string) int {
69+
alphabet := [26]int{}
70+
for i := range alphabet {
71+
alphabet[i] = math.MaxInt
72+
}
73+
minn := math.MaxInt
74+
for i := range points {
75+
ch := s[i]
76+
dis := max(abs(points[i][0]), abs(points[i][1]))
77+
if dis < alphabet[ch - 'a'] {
78+
minn = min(minn, alphabet[ch - 'a'])
79+
alphabet[ch - 'a'] = dis
80+
} else if dis < minn {
81+
minn = dis
82+
}
83+
}
84+
res := 0
85+
for i := 0; i < 26; i++ {
86+
if alphabet[i] < minn {
87+
res++
88+
}
89+
}
90+
return res
91+
}
92+
93+
func abs(i int) int {
94+
if i < 0 {
95+
return -i
96+
}
97+
return i
98+
}
99+
```

0 commit comments

Comments
 (0)