关键词:
给你一个数组 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 中的所有点 互不相同
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/max-points-on-a-line
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
1:每两个点之间求出斜率和相位,用一个长度为4的数组arr来记录。
(1)因为斜率有可能是分数,所以采用arr的前两位来记录此斜率:arr[0] 分母, arr[1]分子,所以需要先求出分母和分子的最大公约数来约分(采用辗转相除法)。
(2)数组的3, 4 位来记录这个这两个点和 X 轴相交的时候的坐标点,原理同上。
2:把这个数组转换为String,当作map的key,map的value 表示相同点的出现的次数。
3:因为每个点都有重复计算,并且计算的值是 1 + 2 + ... + n = value,为了求n,对value 乘以2 开方 +1。
4:当直线与X周平行的时候,需要单独判断,记录与Y周的交点作为key即可。
思路比较简单,就是实现比较耗时。。。
public int maxPoints(int[][] points) int length = points.length; if (length < 3) return length; Map<String, Integer> map = new HashMap<>(length * length); int max = 1; String key; for (int i = 0; i < length - 1; i++) for (int j = i + 1; j < length; j++) int[] a = points[i]; int[] b = points[j]; int x = a[0] - b[0]; int y = a[1] - b[1]; if (y== 0) key = String.valueOf(a[1]); else int min = min(x, y); x /= min; y /= min; int x1 = a[0] * y - a[1] * x; int y1 = y; min = min(x1, y1); x1 /= min; y1 /= min; int[] arr = new int[]x, y, x1, y1; key = Arrays.toString(arr); Integer value = map.get(key); if (value == null) map.put(key, 1); else map.put(key, value + 1); max = Math.max(value + 1, max); return (int) Math.pow(max << 1, 0.5) + 1; public static int min(int x, int y) if (x == 0) return y; int a = x < 0 ? ~x + 1 : x; int b = y < 0 ? ~y + 1 : y; if (a < b) int t = a; a = b; b = t; while (b != 0) if (a == b) break; else int k = a % b; a = b; b = k; return x < 0 ? ~a + 1 : a;
leetcode第149题—直线上最多的点数—python实现(代码片段)
title:LeetCodeNo.149categories:OJLeetCodetags:ProgramingLeetCodeOJLeetCode第149题—直线上最多的点数自己代码的开源仓库:clickhere欢迎Star和Fork😃题目描述给你一个数组points,其中points[i]=[xi,yi]表示X-Y平面上的一个点。求最多有多少个... 查看详情
题目地址(149.直线上最多的点数)(代码片段)
题目地址(149.直线上最多的点数)https://leetcode.cn/problems/max-points-on-a-line/题目描述给你一个数组points,其中points[i]=[xi,yi]表示X-Y平面上的一个点。求最多有多少个点在同一条直线上。 示例1:输入:points=[[1,1],[2,2],[... 查看详情
题目地址(149.直线上最多的点数)(代码片段)
题目地址(149.直线上最多的点数)https://leetcode.cn/problems/max-points-on-a-line/题目描述给你一个数组points,其中points[i]=[xi,yi]表示X-Y平面上的一个点。求最多有多少个点在同一条直线上。 示例1:输入:points=[[1,1],[2,2],[... 查看详情
leetcode0149.直线上最多的点数(代码片段)
...LetMeFly】149.直线上最多的点数力扣题目链接:https://leetcode.cn/problems/max-points-on-a-line/给你一个数组points,其中points[i]=[xi,yi]表示X-Y平面上的一个点。求最多有多少个点在同一条直线上。 示例1:输入:points=[[1... 查看详情
leetcodeno.149直线上最多的点数(代码片段)
...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<=300points[i].l 查看详情
149maxpointsonaline直线上最多的点数
给定二维平面上有n个点,求最多有多少点在同一条直线上。详见:https://leetcode.com/problems/max-points-on-a-line/description//***Definitionforapoint.*structPoint*intx;*inty;*Point():x(0),y(0)*Point(inta,intb):x(a),y(b)*;*/clas 查看详情
leetcodeno.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, 查看详情
2021-09-03:直线上最多的点数。给你一个数组points,其中points[i]=[xi,yi]表示x-y平面上的一个点。求最多有多少个点在同一条直线上。力扣149。(代码片(代码片段)
2021-09-03:直线上最多的点数。给你一个数组points,其中points[i]=[xi,yi]表示X-Y平面上的一个点。求最多有多少个点在同一条直线上。力扣149。福大大答案2021-09-03:具体见代码。代码用golang编写。代码如下:packagem... 查看详情
maxpointsonaline(直线上最多的点数)(代码片段)
给定一个二维平面,平面上有 n 个点,求最多有多少个点在同一条直线上。示例1:输入:[[1,1],[2,2],[3,3]]输出:3解释:^|| o| o| o +------------->0 1 2 34示例 2:输入:[[1,1],[3,2] 查看详情
直线上最多的点数(代码片段)
classSolutionpublicintmaxPoints(int[][]points)if(points.length==1)return1;Map<Double,Integer>map=newHashMap<>();intmax=Integer.MIN_VALUE;for(int[]point1:points)for(int[]point2:points)doublek=(double)(point2[1]-point1[1])/(double)(point2[0]-point1[0]);map.put(k,map.get... 查看详情
直线上最多的点数(代码片段)
classSolutionpublicintmaxPoints(int[][]points)if(points.length==1)return1;Map<Double,Integer>map=newHashMap<>();intmax=Integer.MIN_VALUE;for(int[]point1:points)for(int[]point2:points)doublek=(double)(point2[1]-point1[1])/(double)(point2[0]-point1[0]);map.put(k,map.get... 查看详情
数据结构与算法之深入解析“直线上最多的点数”的求解思路与算法示例(代码片段)
一、题目要求给你一个数组points,其中points[i]=[xi,yi]表示X-Y平面上的一个点,求最多有多少个点在同一条直线上。示例1:输入:points=[[1,1],[2,2] 查看详情
day4直线上最多的点数循环链表四数相加2(代码片段)
四数相加2对下一个题的方式有启发,使用dict存储后两个之和classSolution(object):deffourSumCount(self,A,B,C,D):Dict=foriinrange(len(C)):forjinrange(len(D)):ifC[i]+D[j]inDict:Dict[C[i]+D[j]]+=1else:Dict[ 查看详情
直线上最多的点数
给定一个二维平面,平面上有 n 个点,求最多有多少个点在同一条直线上。functionmaxPoints(points)if(points.length==1)return1letnumber=0for(leti=0;i<points.length-1;i++)letitem=points[i]for(letj=i+1;j<points.length;j++ 查看详情
leetcode刷题模版:141-150
目录简介141.环形链表142.环形链表II143.重排链表144.二叉树的前序遍历145.二叉树的后序遍历146.LRU缓存【未实现】147.对链表进行插入排序148.排序链表149.直线上最多的点数150.逆波兰表达式求值结语简介Hello!非常感谢您阅读海轰的... 查看详情
leetcode刷题模版:141-150
目录简介141.环形链表142.环形链表II143.重排链表144.二叉树的前序遍历145.二叉树的后序遍历146.LRU缓存【未实现】147.对链表进行插入排序148.排序链表149.直线上最多的点数150.逆波兰表达式求值结语简介Hello!非常感谢您阅读海轰的... 查看详情
sql总体上最多的球员(2008年-2016年)(代码片段)
直线交点数种类p2789直线交点数(代码片段)
题目平面上有N条直线,且无三线共点,那么这些直线能有多少不同的交点数?https://www.luogu.com.cn/problem/P2789题目分析我们将n条直线编号,分别称为直线1、直线2、…、直线n。直线2与直线1最多有一个交点,直线3与直线1和直线2... 查看详情