必要的分类讨论

交叉路口过车可行方案

数学 - 拿石子

  • [[比较难的博弈问题]]

直线上最多的点数

  • 149. 直线上最多的点数
  • 真暴力的话,我都想不出来怎么遍历所有情况
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    func 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/算法刷题/必要的分类讨论/
作者
Cyokeo
发布于
2024年9月17日
许可协议