leetcode149.直线上最多的点数(代码片段)

旺仔古李 旺仔古李     2022-12-01     457

关键词:

给你一个数组 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... 查看详情