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

Java实现 LeetCode 149 直线上最多的点数 149. 直线上最多的点数 给定一个二维平面,平面上有 n 个点,求最多有多少个点在同一条直线上。 示例 1: 输入: [[1,1],[2,2],[3,3]] 输出: 3 解释: ^ | | o | o | o +-------------> 0 1 2 3 4 示例 2: 输入: [[1,1],[3,2],[5,3],[4,1],[2,3],[1,4]... 阅读详情


题目: 149. 直线上最多的点数

解题思路

暴力解法:
枚举两个点构成的直线中,其余点在该直线上的个数,返回个数最大的情况
判断点p是否在由start和end构成的直线上:

  • p分别与start和end点的斜率是否相等
    p [ 1 ] − s t a r t [ 1 ] p [ 0 ] − s t a r t [ 0 ] = p [ 1 ] − e n d [ 1 ] p [ 0 ] − e n d [ 0 ] \frac {p[1]-start[1]} {p[0]-start[0]}=\frac {p[1]-end[1]} {p[0]-end[0]} p[0]−start[0]p[1]−start[1]​=p[0]−end[0]p[1]−end[1]​
  • 为了防止除数为0的情况,可以将上述公式转换为:
    ( p [ 1 ] − s t a r t [ 1 ] ) ∗ ( p [ 0 ] − e n d [ 0 ] ) = ( p [ 1 ] − e n d [ 1 ] ) ∗ ( p [ 0 ] − s t a r t [ 0 ] ) ) (p[1]-start[1])*(p[0]-end[0])=(p[1]-end[1])*(p[0]-start[0])) (p[1]−start[1])∗(p[0]−end[0])=(p[1]−end[1])∗(p[0]−start[0]))

具体操作

  1. 一条直线可由两个点决定(start和end)
  2. ans记录最终答案,初始化为1 (至少有一个点在穿过它的直线上)
  3. 逐次选择start和end
    1. 令same为余下所有点中,在该直线上的点的个数,初始化为2 (start和end已经在该直线上)
    2. 逐次选择剩下的点,这里记为点p
      1. 如果点p在该直线上,则same++
      2. 否则,选下一个点
    3. 该start和end的情况遍历完毕,得到same
  4. ans选取目前为止最大的same值
  5. 继续循环或返回结果

代码

class Solution {
    public int maxPoints(int[][] ps) {
        int ans = 1;
        for(int i=0; i<ps.length; i++){
            for(int j=i+1; j<ps.length; j++){
                int same = 2;
                for(int k=j+1; k<ps.length; k++){
                    // start:第一个选择的点
                    int[] start = ps[i];
                    // end:第二个选择的点
                    int[] end = ps[j];
                    // p: 判断是否在start与end所在线上的点
                    int[] p = ps[k];

                    // p与start的斜率 与 p与end的斜率 如果相同,则在一条线上
                    /*
                        (p[1]-start[1]) / (p[0]-start[0]) = (p[1]-end[1]) / (p[0]-end[0]) 
                        为了防止除数为0的情况,可转化为
                        (p[1] - start[1]) * (p[0] - end[0]) = (p[1] - end[1]) * (p[0] - start[0])
                     */
                    int s1 = (p[1] - start[1]) * (p[0] - end[0]);
                    int s2 = (p[1] - end[1]) * (p[0] - start[0]);
                    if(s1 == s2) same++;
                }
                ans = Math.max(same,ans);
            }
        }
        return ans;
    }
}

LeetCode149——直线上最多的点数 我的LeetCode代码仓:https://github.com/617076674/LeetCode 原题链接:https://leetcode-cn.com/problems/max-points-on-a-line/description/ 题目描述: 知识点:哈希表、欧几里得最大公约数算法 思路:用分数形式存储直线的斜率,切勿忘记斜率不存在的情况 (1)新建一个长度为点的数量... 阅读详情

相关推荐

【LeetCode】149. 直线上最多的点数

遍历每个点作为基准点计算基准点到其他点的斜率(使用最大公约数化简)使用HashMap统计相同斜率的点的数量维护最大值作为结果注意处理垂直线的特殊情况。

步子哥的博客 1173

LCOF剑指offer--面试题46. 把数字翻译成字符串

给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。 示例 1: 输入: 12258 输出: 5 解释: 12258有5种不同的翻译,分别是"bccfi", “bwfi”, “bczi”, “mcfi"和"mzi” 提示: 0 <= num < 2…31 来源:力扣(LeetCode) 链接:https://leet

qq_30182357的博客 335

【困难】力扣算法题解析LeetCode149: 直线上最多的点数

本文介绍了一种高效算法,用于计算平面中最多共线的点数。通过遍历每个点作为基准,计算与其他点的斜率并用哈希表统计频率,避免浮点数精度问题。关键优化包括使用最大公约数约分斜率,统一符号处理,以及自定义斜率类提升效率。算法时间复杂度为O(n² log(min(dx, dy))),空间复杂度O(n)。

ylumwd的博客 389

力扣:149. 直线上最多的点数(Python3)

力扣:149. 直线上最多的点数(Python3)

欢迎光临 812

【Leetcode】149.直线上最多的点数(Hard)

哈希表记录相同斜率下的点的个数

明朗晨光的专栏 671

深信服技术认证“SCCA-C”划重点:信服云托管云

该认证包括云数据中心基础、云计算基础、云计算关键技术、云计算交付和运维体系、云计算技术商业应用、信服云托管云、深信服超融合HCI、深信服桌面云aDesk、深信服分布式存储EDS、深信服应用交付AD。学习并获得SCCA-C认证后,可以具备深信服产品功能原理与实践,能够根据业务需求,协助完成云产品方案落地与实施;能够根据业务需求,完成深信服云产品的部署和管理的基本工作。为帮助大家更加系统化地学习云计算知识,高效通过云计算工程师认证,深信服特推出“SCCA-C认证备考秘笈”,共十期内容。

sangfor_edu的博客 614

【算法挑战】直线上最多的点数(含解析、源码)

以上就是本文所有内容了,希望能对你有所帮助,能够解决直线上最多的点数问题。请我喝杯冰可乐也是极好的!已完结,欢迎持续关注。下次见~

bf's blog 488

LVGL 离线字体转换lv_font_conv本地安装

LVGL FONT CONV 离线版本

liu132641的专栏 3389

力扣(LeetCode)149. 直线上最多的点数(2022.05.29)

给你一个数组 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, y

ChaoYue_miku的博客 504

滤波器初步入门(非常全面)

主要关注的是-3dB这个点,-3dB就是截止频率所对应的点,我们把功率降至50%以下的信号定义为被衰减掉了(但要跟实际情况相结合,有些信号衰减-3db不够,需要衰减更多)-3dB这个点对应我们的电压来说是0.707。设计电路可以留一定的余量,如果你把4k设计为截止频率,那么4k时候衰减倍数为-3dB通常是不够的,你可以将截止频率设为2k,那么4k的衰减就可以达到15dB(假设),根据自己的需要去设计对应的截止频率。理想的滤波器是当输入的信号频率大于截止频率时,大于部分的频率对应的电压信号直接归0。

yybyybds的博客 5720

OCV/AOCV/SOCV的介绍和应用

library中的cell delay是在某个固定的PVT(operating condition)下仿真得出的。,cell的delay并不是一个固定值,而是一个随机值,遵循高斯分布或门特卡洛分布,在STA中用OCV来模拟这一『特征』。OCV全称on chip variation,用于描述不同管子间由于工艺偏差、电压降、温度变化引起的delay变化。,也用于描述工艺偏差引起的net厚度宽度的变化从而导致net的电容电阻变化。优点:设置起来比较简单粗暴,对于不那么先进的工艺可行!的影响,更贴合实际。

m0_61003348的博客 8983

力扣 149. 直线上最多的点数 枚举\哈希

https://leetcode-cn.com/problems/max-points-on-a-line/ 思路一:直接暴力枚举,显然答案的那条直线至少涵盖nnn个点中的某222个点,因此直接O(n2)O(n^2)O(n2)枚举直线上的两个点,再遍历一遍进行判断。复杂度O(n3)O(n^3)O(n3)。为了避免斜率不存在等特殊情况,我们可以对判断公式进行移项。 class Solution { public: vector<int> p1,p2; int maxPoints(

xiji333的博客 311

uniapp:解决微信小程序包体积超过2M的优化方案+详解分包问题,编译小程序体积大于2M不能上传和预览提示体积太大的处理教程,uniApp微信小程序主包过大问题如何解决(排查可疑点+分包+最小改动)

uniapp微信小程序开发,如何解决打包太大无法预览发布的问题,uniApp微信小程序包体积超过2M的优化方法,uni-app打包微信小程序主包超2M终极解决方案,使用uniapp开发微信小程序使用uni_modules导致主包文件过大,无法发布的解决方法,UniApp开发的微信小程序主包过大问题及解决方案 编译小程序时Node-modules被打入主包,小程序体积大于2M不能上传和预览,怎么处理,解决微信小程序主包太大问题,微信小程序中主包和分包过大,详解分包问题,uni-app 微信小程序发布时,主包超

✅ 精选推荐文章 5066

LeetCode第149题_直线上最多的点数

给定一个数组points,其中表示 X-Y 平面上的一个点,求最多有多少个点在同一条直线上。

qq_40263592的博客 1133

【推荐100个unity插件】Animator 的替代品?—— Animancer Pro插件的使用介绍

Animancer与Unity Animator对比及使用指南 摘要: 本文对比了Animancer与Unity官方Animator的核心差异,分析了Animancer的优势特点。Animancer采用代码驱动模式,相比Animator的状态机系统更灵活高效,支持实时调试、动态混合和深度逻辑集成。文章详细介绍了Animancer的快速使用方法,包括动画播放、切换和触发机制,并区分了免费版与专业版的功能差异。适合需要高效动画开发、复杂交互逻辑的中小项目,为开发者提供了一种现代化的动画解决方案。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 2434

[DDR5]DDR5 SDRAM 状态图 和 基本功能

DDR5 SDRAM的读写操作以突发(burst mode)为导向,从选定的位置开始,并按照编程顺序进行16个突发长度或8个“切片”突发长度的操作。从ACTIVATE命令开始,然后是读取或写入命令。

串起点滴 1201

【题解】【LeetCode】149. 直线上最多的点数

149. 直线上最多的点数 原题传送:LeetCode 149. 直线上最多的点数 给定一个二维平面,平面上有 n 个点,求最多有多少个点在同一条直线上。 示例 1: 输入: [[1,1],[2,2],[3,3]] 输出: 3 解释: ^ | | o | o | o +-------------> 0 1 2 3 4 示例 2: 输入: [[1,1],[3,2],[5,3],[4,1],[2,3],[1,4]] 输出: 4 解释: ^ | | o | o

葑鈊丶 564

PCL 计算点云包围球【2025最新版】

包围球通常用于简单排斥,因为与球体相交的方程很简单,同样重要的是,旋转一个球体并不会改变其范围。因此,当包围球用于简单排斥时,如果球体中心是对象的原点,则可以忽略对象的方向。

点云侠的博客 2068

leetcode 149 直线上最多的点数

许久未发题解了,前阵子忙于期末考。 今天想说一道有意思的题目,偏向于数学的编程题:leetcode 149 直线上最多的点数。原题链接https://leetcode-cn.com/problems/max-points-on-a-line/。 题目是这样的,给你一个二维数组,每个数组中都是一个二维坐标,就是数学中的x与y,所以points[n]的size一定是2。每个坐标代表着一个点,问你最多有几个点在同一条直线上。 是不是觉得题目通俗易懂却又不知道用什么方法来做?其实这道题没有用到任何的算法,只是纯粹靠

qq_51972900的博客 454

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【Leetcode】149直线上最多的点数

package Leetcode真题分门别类.查找表相关问题; /** * @Author bennyrhys * @Date 2020-05-14 14:30 * 思路: * 暴力O(N^3) * * 注意: * 一条直线上斜率相等(y2−y1)∗(x−x2)=(y−y2)∗(x2−x1) * 两个点,点重合情况特殊处理 */ public class _149直线上最多的点数 { public int maxPoints(int[][] points) { i

瑞新の博客:bennyrhys 1620

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【LeetCode: 149. 直线上最多的点数 + 模拟遍历】

【LeetCode: 149. 直线上最多的点数 + 模拟遍历】给你一个数组 points ,其中 points[i] = [xi, yi] 表示 X-Y 平面上的一个点。求最多有多少个点在同一条直线上。

Coder_ljw的博客 648

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Leetcode(149)——直线上最多的点数

Leetcode(149)——直线上最多的点数 题目 给你一个数组 pointspointspoints ,其中 points[i]=[xi,yi]points[i] = [xi, yi]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 提示

KCDCY的博客 1150

LeetCode 149:直线上最多的点数

给定平面上的点集,需找到。

m0_75126572的博客 372

leetcode-149-直线上最多的点数-java

题目及测试 package pid149; /*直线上最多的点数 给定一个二维平面,平面上有 n 个点,求最多有多少个点在同一条直线上。 示例 1: 输入: [[1,1],[2,2],[3,3]] 输出: 3 解释: ^ | | o | o | o +-------------> 0 1 2 3 4 示例 2: 输入: [[1,1],[3,2],[5,3],[4,1],[2,3],[1,4]] 输出: 4 解释: ^ | | o | o

今天吃了吗的博客 355

leetcode 149. 直线上最多的点数

之前棋盘类的题做多了,一开始只想到了横竖斜四个方向,错了一次才想明白斜率是任意的。

fks143的专栏 325

力扣 149. 直线上最多的点数(困难)

题目 给你一个数组 points ,其中 points[i]=[xi,yi]points[i] = [x_i, y_i]points[i]=[xi​,yi​] 表示 X-Y 平面上的一个点。求最多有多少个点在同一条直线上。 提示: 1 <= points.length <= 300 points[i].length == 2 −104<=xi,yi<=104-10^4 <= x_i, y_i <= 10^4−104<=xi​,yi​<=104 points

毛毛的博客 301
上一篇: 【力扣72. 编辑距离 (动态规划)】思路、详细图示、代码
下一篇: 【JavaScript:函数】
莱布尼杰
博客等级 码龄9年 3粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值