题解 | #直线上的牛#
直线上的牛
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题的解法思路
