题目

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

  • 示例 1:

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

  • 示例 2:

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

提示:

  • 1 <= points.length <= 300
  • points[i].length == 2
  • -104 <= xi, yi <= 104
  • points 中的所有点 互不相同

解题思路

  • 遍历每一个点标i,以点标i为原点向后遍历后面的所有点标,记作j,计算i与j之间的斜率和截距(因为统一以i为起点,所以不需要计算截距,只需要用斜率就能表示一条直线)
  • 使用map记录斜率,因为都经过点标i,所以相同斜率即为同一条直线上的点,考虑到斜率可能是小数的精度问题,因此将斜率化成最简分数的形式(使用辗转相除法求最大公约数),再使用字符串进行表示。最后,斜率相同的直线个数+1(因为一条直线是由两个点表示的,因此n条直线里面含有n+1个点),就是处于同一直线下的点标数量。

辗转相除法

做法:用较大数除以较小数,再用出现的余数(第一余数)去除除数,再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止。

代码

class Solution {int gcd(int a, int b) {return b == 0 ? a : gcd(b, a % b);}public int maxPoints(int[][] points) {int n=points.length,res=1;for (int i = 0; i < n; i++) {HashMap<String, Integer> map = new HashMap<>();int x1=points[i][0],y1=points[i][1];int max=0;for (int j = i+1; j < n; j++) {int x2=points[j][0],y2=points[j][1];int a=x1-x2,b=y1-y2;int gcd = gcd(a, b);String key = (a / gcd) + " " + (b / gcd);map.put(key,map.getOrDefault(key,0)+1);max=Math.max(max,map.get(key));}res=Math.max(res,max+1);}return res;}
}

leetcode 149. 直线上最多的点数相关推荐

  1. LeetCode 149 直线上最多的点数

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

  2. Leetcode刷题149. 直线上最多的点数

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

  3. 149. 直线上最多的点数

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

  4. leetcode 149. Max Points on a Line |149. 直线上最多的点数(Java)

    题目 https://leetcode.com/problems/max-points-on-a-line/ 题解 hard 题,普通解法不难,有几个小坑: key : key : value 的存储 ...

  5. 力扣 149. 直线上最多的点数

    题目 给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 "a" ,1 翻译成 "b",--,11 翻译成 "l",--,25 翻译 ...

  6. 直线上最多的点数 | leetcode 149

    题目 给定一个二维平面,平面上有 n 个点,求最多有多少个点在同一条直线上. 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/max-point ...

  7. 直线上最多的点数java

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

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

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

  9. Leetcode--149. 直线上最多的点数

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

最新文章

  1. tf.variable_scope 参数
  2. View绘制流程的入口
  3. 思科AP与交换机端口的配置
  4. Github上这几个沙雕项目,够我玩三天!
  5. python 制作gif-如何在线制作gif图片?
  6. DzzOffice增加应用对扩展名文件的支持设置,将会在Beta中提供。
  7. 汇编伪指令EVEN(数据对齐的伪指令,使得下一个变量的起始地址是偶数字节的)
  8. UA MATH563 概率论的数学基础 中心极限定理7 Kolmogorov extension theorem及其扩展
  9. 计算机制图国家规范,竣工图绘制相关国家规范
  10. 软件工程概论 课堂练习 第2次作业2【静态结构建模——画出相应对象模型】
  11. 北大朱占星:顶级会议疯狂投稿下的AI现状 | 专栏
  12. 5817. 【NOIP提高A组模拟2018.8.15】 抄代码
  13. shell 获取当前日期时间
  14. 凯撒密码加密算法python_想偷WiFi?万能钥匙不行?试试python一键破解!|wifi|python|profile|算法|无线网卡...
  15. html的iframe用法
  16. JAVA泛型-泛型方法的定义和使用
  17. Opengl es2.0 学习笔记(九)颜色混合
  18. java包是什么意思_java中的“包”到底是什么意思?
  19. 13代酷睿移动端处理器:HX、H、P和U系列区别是什么?
  20. 什么是照度(光照强度)?

热门文章

  1. Linux下的I/O多路复用select,poll,epoll浅析
  2. verilator编译 更新文件的规则
  3. 1024 科学计数法 (20 分
  4. pthread_cancel、pthread_equal函数
  5. LeetCode3:Longest Substring Without Repeating Characters
  6. css知识笔记(四)——代码简写、颜色值、长度值
  7. ddt源码修改:HtmlTestRunner报告依据接口名显示用例名字
  8. 教辅的组成(网络流果题 洛谷P1231)
  9. webpack基础使用Loader(三)
  10. js中的extend的用法及其JS中substring与substr的区别