当前位置:   article > 正文

Golang | Leetcode Golang题解之第149题直线上最多的点数

Golang | Leetcode Golang题解之第149题直线上最多的点数

题目:

题解:

  1. func maxPoints(points [][]int) (ans int) {
  2. n := len(points)
  3. if n <= 2 {
  4. return n
  5. }
  6. for i, p := range points {
  7. if ans >= n-i || ans > n/2 {
  8. break
  9. }
  10. cnt := map[int]int{}
  11. for _, q := range points[i+1:] {
  12. x, y := p[0]-q[0], p[1]-q[1]
  13. if x == 0 {
  14. y = 1
  15. } else if y == 0 {
  16. x = 1
  17. } else {
  18. if y < 0 {
  19. x, y = -x, -y
  20. }
  21. g := gcd(abs(x), abs(y))
  22. x /= g
  23. y /= g
  24. }
  25. cnt[y+x*20001]++
  26. }
  27. for _, c := range cnt {
  28. ans = max(ans, c+1)
  29. }
  30. }
  31. return
  32. }
  33. func gcd(a, b int) int {
  34. for a != 0 {
  35. a, b = b%a, a
  36. }
  37. return b
  38. }
  39. func abs(x int) int {
  40. if x < 0 {
  41. return -x
  42. }
  43. return x
  44. }
  45. func max(a, b int) int {
  46. if a > b {
  47. return a
  48. }
  49. return b
  50. }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/黑客灵魂/article/detail/740101
推荐阅读
相关标签
  

闽ICP备14008679号