需求:给定一个二维平面,平面上有 n 个点,求最多有多少个点在同一条直线上。

分析思路:
1、将所有点二维坐标化,即定义出所有点的x,y坐标值
2、遍历出所有取出两点的情况(不考虑先后顺序),根据任意两点都确定一条直线,直线参数为k斜率,b与y轴交点的纵坐标(此时x=0),将他们放入一个列表中
3、将所有直线放入一个集合并完成去重操作,增加直线的第三个参数n=0用于第四步判断每条直线上有几个点
4、将所有点遍历并判断是否在集合中的直线上,若在直线上,则直线对应的n加1
5、遍历所有代表直线的列表,取出n最大的直线其n值就是最多有n个点在此条直线上

def line(point1, point2):     #定义一个函数通过两点来计算出对应直线的参数,#传入的参数point1、point2都是列表try:y1 = point1[1]y2 = point2[1]x1 = point1[0]x2 = point2[0]#根据列表对应下标取出x、y值k = (y2-y1)/(x2-x1)#根据x、y值计算出斜率,当斜率无穷大时报错,进入exceptb = y1-k*x1#计算出breturn [k, b,0]#返回直线参数,第三个参数为0,用来后面的计数except Exception:return ["+8", y1, 0]#当报错时意味着斜率为无穷大,我们用"+8"代替def judge_in(point_in, line_in):#用来判断点是否在直线上,若在则返回True,#若不在则返回Falsex_in = point_in[0]y_in = point_in[1]k_in = line_in[0]b_in = line_in[1]if k_in == "+8":#当斜率无穷大时,单独判断if b_in == y_in:return Trueelse:return Falseelif y_in == x_in*k_in+b_in:return Trueelse:return False"""可以改变下方列表中点的参数"""
point_list = [[1, 1], [3, 2], [5, 3], [4, 1], [2, 3], [1, 4]]
#给出一个包含几个点的列表# point_list = [[1,1],[2,2],[3,3]]
line_list = []
#新建一个用来接收直线的空列表
new_list = []
#直线去重后加入此列表
for i in range(len(point_list)):for j in range(i+1, len(point_list)):#通过双层的for循环给出所有两个点的组合line_s = line(point_list[i], point_list[j])#利用函数求出直线的前两个参数line_list.append(line_s)print(line_list)
#得到的是一组有重复参数的直线
for k in line_list:if k not in new_list:#去重new_list.append(k)
for m in point_list:for n in new_list:#遍历所有点和线,判断点是否在线上,#若在则直线第三个用来计数的参数加1if judge_in(m, n):n[2] += 1
print(new_list)
#输出去重完毕后的列表,再经过一次遍历即可找出最多点所在的直线

给定一个二维平面,平面上有 n 个点,求最多有多少个点在同一条直线上。相关推荐

  1. LeetCode149. 直线上最多的点数: 给定一个二维平面,平面上有 n 个点,求最多有多少个点在同一条直线上。

    给定一个二维平面,平面上有 n 个点,求最多有多少个点在同一条直线上. 示例 1: 输入: [[1,1],[2,2],[3,3]] 输出: 3 解释: ^ | | o | o | o ±------- ...

  2. 每天一道LeetCode-----平面上n个点,计算最多有多少个点在一条直线上

    Max Points on a Line 原题链接Max Points on a Line 给出2D平面中的n个坐标点,计算最多有多少个点在一条直线上 一条直线可以用斜率表示,即如果已知(x1,y1) ...

  3. [leetcode] Max Points on a Line 判断最多有多少个点在同一条直线上

    Given n points on a 2D plane, find the maximum number of points that lie on the same straight line. ...

  4. LintCode 最多有多少个点在一条直线上

    题目 给出二维平面上的n个点,求最多有多少点在同一条直线上. 样例 给出4个点:(1, 2), (3, 6), (0, 0), (1, 3). 一条直线上的点最多有3个. 解决思路 重复的点没有必要去 ...

  5. 最多有多少个点在一条直线上

    题目:给出二维平面上的n个点,求最多有多少点在同一条直线上. 例子:给出4个点:(1, 2), (3, 6), (0, 0), (1, 3).一条直线上的点最多有3个. 方法:取定一个点points[ ...

  6. 最多有多少个点在同一条直线上

    给出二维平面上的n个点,求最多有多少点在同一条直线上. 样例 给出4个点:(1, 2), (3, 6), (0, 0), (1, 3). 一条直线上的点最多有3个. import java.util. ...

  7. lintcode,最多有多少个点在一条直线上

    给出二维平面上的n个点,求最多有多少点在同一条直线上. 样例 给出4个点:(1, 2), (3, 6), (0, 0), (1, 3). 一条直线上的点最多有3个. 解题思路:从第一个点开始遍历,每次 ...

  8. LinkCode-最多有多少个点在一条直线上

    最多有多少个点在一条直线上 给出二维平面上的n个点,求最多有多少点在同一条直线上. 样例 给出4个点:(1, 2), (3, 6), (0, 0), (1, 3). 一条直线上的点最多有3个. 问题分 ...

  9. 给定一个二维的 0-1 矩阵,其中 0 表示海洋,1 表示陆地。单独的或相邻的陆地可以形成岛屿,每个格子只与其上下左右四个格子相邻。求最大的岛屿面积。

    给定一个二维的 0-1 矩阵,其中 0 表示海洋,1 表示陆地.单独的或相邻的陆地可以形成岛屿,每个格子只与其上下左右四个格子相邻.求最大的岛屿面积. function func(arr) {/*** ...

最新文章

  1. 生产环境 JVM 内存溢出案例分析
  2. mac下Android studio配置gradle的路径
  3. linux 系统优化初始化配置
  4. 一款超级简单的瀑布流的制作
  5. unity fixedupdate_3D俯视角射击——用Unity还原东方弹幕(上)
  6. spark出现bytes consumed error的问题
  7. Leetcode每日一题:345.reverse-vowels-of-a-string(反转字符串中的元音字母)
  8. 如何在Shell脚本中漂亮地打印JSON?
  9. fastcopy会损坏硬盘_绚丽多彩 卓有不凡 三星移动固态硬盘T5金属红新品评测
  10. 我的linux学习之路---配置VNC服务器(1)
  11. Java Web ——基于Jsp+Servlet的学生上课签到打卡系统/上课考勤管理系统
  12. 微信小程序跳转微信公众号
  13. Android 12 WiFi 架构
  14. java当前不可用,java代码向服务端狂发消息,导致的服务器连接通道不可用
  15. 两层板(双面板)如何控制50欧特性阻抗
  16. 基于PHP的客户分销商管理系统
  17. Mysql优化(一)—Sql语句
  18. CSS奇思妙想 -- 使用 background 创造各种美妙的背景(上篇)...
  19. Chino with Ciste
  20. Rust crates镜像源管理 crm

热门文章

  1. php两周免登录,php可以按天连续去两周的更新数据吗
  2. android 剪切图片
  3. FAT32、NTFS和exFAT的区别是什么?该如何选择?
  4. 准备好迎接AV1的黄金时代了吗?
  5. 旅行,说走就走 Help? [C++数据类型和表达式]
  6. Java后端架构师的成长之路(二)——Java设计模式(2)
  7. 微信小程序背景音乐设置链接失效解决
  8. 计算机英语pork,英语:pork的用法总结大全
  9. 【HTML5+CSS3】盒子的大小
  10. Vtalk局域网聊天室 基于Python