题解 | #直线上的牛#
直线上的牛
https://www.nowcoder.com/practice/58ff4047d6194d2ca4d80869f53fa6ec
- 题目考察的知识点 : 哈希表
- 题目解答方法的文字分析:
- 对于任意两个点 (x1, y1) 和 (x2, y2),它们在同一条直线上当且仅当它们的斜率相等。可以使用哈希表来统计每个斜率对应的点数,以及该斜率的出现次数。具体来说,固定一个点 i,遍历除该点外的所有点 j,求出点 i 和点 j 的斜率 k,然后将 k 对应的点数加 1。
- 两种特殊情况,斜率不存在:此时说明点 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题的解法思路