当前位置:首页 > 编程笔记 > 正文
已解决

力扣:149. 直线上最多的点数(Python3)

来自网友在路上 176876提问 提问时间:2023-11-05 23:44:34阅读次数: 76

最佳答案 问答题库768位专家为你答疑解惑

题目:

给你一个数组 points ,其中 points[i] = [xi, yi] 表示 X-Y 平面上的一个点。求最多有多少个点在同一条直线上。

来源:力扣(LeetCode)
链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

示例:

示例 1:

输入:points = [[1,1],[2,2],[3,3]]输出:[0,1]
解释:3


示例 2:

输入:points = [[1,1],[3,2],[5,3],[4,1],[2,3],[1,4]]
输出:4

解法:

遍历每个点,统计当前点和其它所有点的斜率,记录斜率最多的次数。

知识点:

1.round(number, digits):digits>0,四舍五入到指定的小数位;digits=0, 四舍五入到最接近的整数;digits<0 ,在小数点左侧进行四舍五入;如果round()函数只有number这个参数,等同于digits=0。四舍五入规则:要求保留位数的后一位<=4,则不进位;要求保留位数的后一位“>=6”,则进位;当精确位后面一位的数字是5的,此时需要看这个5后面是否还有值,如果5后面有值(0忽略),则直接进位,如果5后面没值或值为0,则需要判断5前面的值是偶数还是奇数,如果5前面是偶数,不进位,如果是奇数,进位。

代码:

from itertools import permutations
from collections import Counter, defaultdictclass Solution:def maxPoints(self, points: List[List[int]]) -> int:result = 0permutation = defaultdict(list)for p in permutations(points, 2):permutation[tuple(p[0])].append(p[1])for k, v in permutation.items():default = Counter([x1 for x1, y1 in v])[k[0]]result = max(max(list(Counter([round((y1 - k[1]) / (x1 - k[0]), 10) for x1, y1 in v if x1 != k[0]]).values()) + [0]), default, result)return result + 1

查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"力扣:149. 直线上最多的点数(Python3)":http://eshow365.cn/6-33119-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!