题解 | #直线上的牛#

直线上的牛

https://www.nowcoder.com/practice/58ff4047d6194d2ca4d80869f53fa6ec

  • 题目考察的知识点 : 哈希表
  • 题目解答方法的文字分析:
  1. 对于任意两个点 (x1, y1) 和 (x2, y2),它们在同一条直线上当且仅当它们的斜率相等。可以使用哈希表来统计每个斜率对应的点数,以及该斜率的出现次数。具体来说,固定一个点 i,遍历除该点外的所有点 j,求出点 i 和点 j 的斜率 k,然后将 k 对应的点数加 1。
  2. 两种特殊情况,斜率不存在:此时说明点 i 和点 j 在同一条竖直线上;两点重合:此时说明点 i 和点 j 重合。
  • 本题解析所用的编程语言: Python
  • 完整且正确的编程代码

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param points int整型二维数组 
# @return int整型
#
from fractions import Fraction
class Solution:
    def maxPoints(self , points: List[List[int]]) -> int:
        n = len(points)
        if n < 3:
            return n

        # 定义哈希表 dict,key 表示斜率,value 表示该斜率对应的点数
        res = 0
        for i in range(n):
            slope_count = {'self': 1}  # 记录这个点本身就是一条直线的情况
            for j in range(i + 1, n):
                if points[i] == points[j]:
                    slope = 'self'  # 如果两点重合,则用字符串表示
                elif points[i][0] == points[j][0]:
                    slope = 'inf'  # 如果两点横坐标相同,则用字符串表示
                else:
                    # 使用 fractions 模块表示分数
                    slope = Fraction(points[i][1] - points[j][1], points[i][0] - points[j][0])

                if slope not in slope_count:
                    slope_count[slope] = 1
                slope_count[slope] += 1

            max_count = max(slope_count.values())
            res = max(res, max_count)

        return res
牛客高频top202题解系列 文章被收录于专栏

记录刷牛客高频202题的解法思路

全部评论

相关推荐

09-01 10:50
已编辑
东华大学 C++
PDD校招_内推:拼多多意向和开奖一般都比较晚,可能10月11月才出意向
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务