必要的分类讨论
交叉路口过车可行方案
数学 - 拿石子
- [[比较难的博弈问题]]
直线上最多的点数
- 149. 直线上最多的点数
- 真暴力的话,我都想不出来怎么遍历所有情况
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24func maxPoints(points [][]int) int
{
ans := 0
n := len(points)
for i := 0; i < n; i++
{
// 遍历每一个点作为直线上的一个点
// 用统计其他点与当前点i的斜率出现次数
cnt := make(map[string]int) // key为其他点与当前点i的斜率,value为该斜率的个数
// 遍历其他点,计算与当前点i的斜率
for j := i + 1; j < n; j++
{
diffX := points[j][0] - points[i][0]
diffY := points[j][1] - points[i][1]
z := gcd(diffX, diffY)
// 这里直接用最简分式作为key,代表斜率
key := strconv.Itoa(diffY / z) + "/" + strconv.Itoa(diffX / z)
cnt[key]++
ans = max(ans, cnt[key])
}
}
return ans + 1
}
func gcd(a, b int) int { for b != 0 { a, b = b, a % b } return a }
必要的分类讨论
http://example.com/2024/09/17/算法刷题/必要的分类讨论/