首页 > 其他分享 >149. Max Points on a Line

149. Max Points on a Line

时间:2024-02-18 09:03:29浏览次数:30  
标签:int Max ++ 斜率 Points result dup Line points

149. Max Points on a Line

Given an array of points where points[i] = [xi, yi] represents a point on the X-Y plane, return the maximum number of points that lie on the same straight line.

Example 1:

Input: points = [[1,1],[2,2],[3,3]]
Output: 3

Example 2:

Input: points = [[1,1],[3,2],[5,3],[4,1],[2,3],[1,4]]
Output: 4

Constraints:

  • 1 <= points.length <= 300
  • points[i].length == 2
  • -104 <= xi, yi <= 104
  • All the points are unique.

思路:

1. 从每一个点A开始,向剩余的所有点进行划线,对于任意的B,C点,AB 和 AC斜率相同的即为A,B,C在同一条线上的

2. 从一个点向所有其他点划线后的斜率汇总,找到最大斜率个数相同的

2. 特殊场景考虑,需要考虑重复的点。 1. 重复的点可以认为是在同一条线上  2.对于各种同一条线上的,都需要将重复的点计入,因为重复的点可以归到任意一条线上

class Solution {
    public int maxPoints(int[][] points) {
        int result = 0;
        // 从每一个点出发,去跟剩下的所有点进行划线
        for(int i = 0; i < points.length; i++) {
            result = Math.max(result, getMax(points, i));
        }
        return result;
    }
    
    private int getMax(int[][] points, int curr) {
        //针对curr点,对于所有的点进行划线,将斜率相同的进行汇总
        int dup = 0;//用于处理重合的点
        Map<Double, Integer> map = new HashMap<>();
        int x = points[curr][0], y = points[curr][1];
        for(int i = 0; i < points.length; i++) {
            int nx = points[i][0] - x, ny = points[i][1] - y;
            // 如果是重合的点,那么dup++
            if(nx == 0 && ny == 0) {
                dup++;
                continue;
            }
            // 如果不重合,需要考虑垂直的情况
            double slope = nx == 0 ? Double.MAX_VALUE : (double)ny / nx;
            map.put(slope, map.getOrDefault(slope, 0) + 1);
        }
        int result = 0;
        for(int val : map.values()) {
            result = Math.max(result, val + dup);// 最终的同一斜率的点还要加上所有的重合点dup
        }
        //特殊场景handle,如果都是重合的点
        result = Math.max(result, dup);
        return result;
    }
}

 

标签:int,Max,++,斜率,Points,result,dup,Line,points
From: https://www.cnblogs.com/cynrjy/p/18018722

相关文章

  • Java中正则表达式(regex)匹配多行(Pattern.MULTILINE和Pattern.DOTALL模式)
    ​ Java中,正则表达式(regex)的处理是通过Pattern类实现的。Pattern类提供了多种标志(flags)来修改正则表达式的行为。其中,Pattern.MULTILINE和Pattern.DOTALL是两个常用的模式,它们分别用于处理多行文本和让.匹配包括行终止符在内的任意字符。 参考文档:Java中正则表达式(regex)匹......
  • SharePoint Online Viva Connections 添加到Teams
    前言我们新建了VivaConnections,然后如何让大家知道呢?Teams入口是一个非常好的方法。正文1.我们选择安装VivaConnections到Teams,如下图:2.这样会弹出安装的步骤,如下图:3.进入Teams管理中心,找到Teamsapps-Setuppolicies,如下图:4.添加一个新......
  • tensorflow distributed training in tfx pipeline run by kubeflow
    1.deployworker,parameterserveronkubernetescluster1.1buildcontainerimageofworker,parameterserver$gitclonehttps://github.com/tensorflow/ecosystem.git$cdecosystem/distribution_strategy$sudonerdctlbuild--no-cache-ttf_std_server:......
  • SharePoint Online 添加Viva Connections Dashboard报错
    前言上一篇博客为大家介绍了如何新建VivaConnectionsexperience,不过,在添加Dashboard的时候碰到了问题,这是因为默认不会新建Dashboard,我们需要手动创建。正文1.错误描述和错误截图,如下图:Can'tgetthisDashboardURL.Itmaynotbesetupyet,oritmay......
  • 如何新建SharePoint Online Viva Connections experiences
    前言Viva也是近些年来出现的一个新词汇,我们可以在Microsoft365中启用,我们今天简单介绍下。正文1.访问Microsoft365首页,找到Admin点击并进入,如下图:2.在左侧导航里找到设置,设置里有Viva,点击进入,如下图:3.找到VivaConnections,点击进入,如下图:4......
  • 迈从AX5 PRO MAX拆解以及驱动说明
    迈从黑武士AX5PROMAX拆解图看到拆解可以了解以下:编码器是防尘的、鼠标微动是TTC的光微动,是免焊接的,后续更换方便。鼠标正面涂了三防漆,背面无。按键柱的两个贴片目测至少0.7MM以上 鼠标微动手感:脆闷AX5PROMAX型号: 602535500MA 电池数据:长36MM、宽24.5MM、厚度5.8MM电......
  • SharePoint Online 配置列表验证
    前言以前,我们做SharePoint列表的时候,经常会发现有开始时间、结束时间这样的,但是限制开始时间小于结束时间就很不方便。正文1.这里,我们就需要用到列表验证了,如下图:2.去到列表设置,找到验证设置,如下图:3.在这里可以进行条件设置,如下图:4.演示测试......
  • Scanner—使用nextLine方式接收
    packagescanner;importjava.util.Scanner;publicclassnextLine{publicstaticvoidmain(String[]args){//1.创建一个扫描器对象,用于接收键盘数据Scannerscanner=newScanner(System.in);//new.Scanner(System.in)Alt+回车System.......
  • Go - floating points
    Notethatthere’saninfinitenumberof realvaluesbetweenmath.SmallestNonzeroFloat64(thefloat64minimum)and math.MaxFloat64(thefloat64maximum).Conversely,thefloat64typehasafinite numberofbits:64.Becausemakinginfinitevaluesfitinto......
  • 如何为SharePoint Online站点扩容
    前言最近,因为项目已经上线,站点的文档和视频越来越多,默认给的50GB容量已经不够使用了,所以扩容迫在眉睫。正文1.进入Office365管理中心,找到Admin,如下图:2.找到SharePoint管理中心(如果没有需要点一下...showall),如下图:3.选中需要扩容的站点,在存储限......