leetcode 149. 直线上最多的点数
题目
给你一个数组 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. 直线上最多的点数相关推荐
- LeetCode 149 直线上最多的点数
一.题目介绍 给定一个二维平面,平面上有 n 个点,求最多有多少个点在同一条直线上. 示例 1: 输入: [[1,1],[2,2],[3,3]] 输出: 3 解释: ^ | | o | ...
- Leetcode刷题149. 直线上最多的点数
给定一个二维平面,平面上有 n 个点,求最多有多少个点在同一条直线上. 示例 1: 输入: [[1,1],[2,2],[3,3]] 输出: 3 解释: ^ | | o | o | ...
- 149. 直线上最多的点数
给你一个数组 points ,其中 points[i] = [xi, yi] 表示 X-Y 平面上的一个点.求最多有多少个点在同一条直线上. 示例 1: 输入:points = [[1,1],[2,2 ...
- leetcode 149. Max Points on a Line |149. 直线上最多的点数(Java)
题目 https://leetcode.com/problems/max-points-on-a-line/ 题解 hard 题,普通解法不难,有几个小坑: key : key : value 的存储 ...
- 力扣 149. 直线上最多的点数
题目 给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 "a" ,1 翻译成 "b",--,11 翻译成 "l",--,25 翻译 ...
- 直线上最多的点数 | leetcode 149
题目 给定一个二维平面,平面上有 n 个点,求最多有多少个点在同一条直线上. 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/max-point ...
- 直线上最多的点数java
给你一个数组 points ,其中 points[i] = [xi, yi] 表示 X-Y 平面上的一个点.求最多有多少个点在同一条直线上. 示例 1: 输入:points = [[1,1],[2,2 ...
- LeetCode149. 直线上最多的点数: 给定一个二维平面,平面上有 n 个点,求最多有多少个点在同一条直线上。
给定一个二维平面,平面上有 n 个点,求最多有多少个点在同一条直线上. 示例 1: 输入: [[1,1],[2,2],[3,3]] 输出: 3 解释: ^ | | o | o | o ±------- ...
- Leetcode--149. 直线上最多的点数
给定一个二维平面,平面上有 n 个点,求最多有多少个点在同一条直线上. 示例 1: 输入: [[1,1],[2,2],[3,3]] 输出: 3 解释: ^ | | o | o | ...
最新文章
- tf.variable_scope 参数
- View绘制流程的入口
- 思科AP与交换机端口的配置
- Github上这几个沙雕项目,够我玩三天!
- python 制作gif-如何在线制作gif图片?
- DzzOffice增加应用对扩展名文件的支持设置,将会在Beta中提供。
- 汇编伪指令EVEN(数据对齐的伪指令,使得下一个变量的起始地址是偶数字节的)
- UA MATH563 概率论的数学基础 中心极限定理7 Kolmogorov extension theorem及其扩展
- 计算机制图国家规范,竣工图绘制相关国家规范
- 软件工程概论 课堂练习 第2次作业2【静态结构建模——画出相应对象模型】
- 北大朱占星:顶级会议疯狂投稿下的AI现状 | 专栏
- 5817. 【NOIP提高A组模拟2018.8.15】 抄代码
- shell 获取当前日期时间
- 凯撒密码加密算法python_想偷WiFi?万能钥匙不行?试试python一键破解!|wifi|python|profile|算法|无线网卡...
- html的iframe用法
- JAVA泛型-泛型方法的定义和使用
- Opengl es2.0 学习笔记(九)颜色混合
- java包是什么意思_java中的“包”到底是什么意思?
- 13代酷睿移动端处理器:HX、H、P和U系列区别是什么?
- 什么是照度(光照强度)?
热门文章
- Linux下的I/O多路复用select,poll,epoll浅析
- verilator编译 更新文件的规则
- 1024 科学计数法 (20 分
- pthread_cancel、pthread_equal函数
- LeetCode3:Longest Substring Without Repeating Characters
- css知识笔记(四)——代码简写、颜色值、长度值
- ddt源码修改:HtmlTestRunner报告依据接口名显示用例名字
- 教辅的组成(网络流果题 洛谷P1231)
- webpack基础使用Loader(三)
- js中的extend的用法及其JS中substring与substr的区别