【重要+细节】LeetCode 149. Max Points on a Line

leetcode 149题汇总 适合进行算法思维的练习 基本属于easy题目,medium和hard的题目比较少 但是比较适合最开始的练习 适合进行算法思维的练习 基本属于easy题目,medium和hard的题目比较少 但是比较适合最开始的练习 立即下载

LeetCode 149. Max Points on a Line

Solution1:

参考花花酱:https://zxi.mytechroad.com/blog/geometry/leetcode-149-max-points-on-a-line/
count by slope
这里写图片描述
Time complexity: O(n2) O ( n 2 )
Space complexity: O(n) O ( n )

/**
 * Definition for a point.
 * struct Point {
 *     int x;
 *     int y;
 *     Point() : x(0), y(0) {}
 *     Point(int a, int b) : x(a), y(b) {}
 * };
 */
class Solution {
public:
    int maxPoints(vector<Point>& points) {
        int n = points.size();        
        int ans = 0;
        for (int i = 0; i < n; i++) {
            std::map<std::pair<int, int>, int> count; //map的关键字类型可以用pair!!!
            int same_points = 1;//本身的点
            int max_points = 0;
            const Point& p1 = points[i];
            for (int j = 0; j < n && j != i; ++j) {//j = i + 1始终不是很理解
                const Point& p2 = points[j];
                if (p1.x == p2.x && p1.y == p2.y)
                    ++same_points;
                else
                    max_points = max(max_points, ++count[getSlope(p1, p2)]);
            }
            ans = max(ans, same_points + max_points);             
        }
        return ans;
    }
private:
    // slope dy/dx : <dy, dx>
    std::pair<int, int> getSlope(const Point& p1, const Point& p2) {
        const int dx = p2.x - p1.x;
        const int dy = p2.y - p1.y;

        // horizontal line
        if (dy == 0) return { p1.y, 0 };
        // vertical line
        if (dx == 0) return { 0, p1.x };

        const int d = gcd(dx, dy);
        return { dy / d, dx / d };
    }

    int gcd(int m, int n) { //求最大公约数
        return n == 0 ? m : gcd(n, m % n);
    }
};

有几个需要学习的点:

1.map的关键字类型可以使std::pair类型

2.求最大公约数

辗转相除法
辗转相除法最大的用途就是用来求两个数的最大公约数。 用(a,b)来表示a和b的最大公约数。有定理: 已知a,b,c为正整数,若a除以b余c,则(a,b)=(b,c)。
一.辗转相除法
例1 。求两个正数8251和6105的最大公因数。
(分析:辗转相除→余数为零→得到结果)
解:8251=6105×1+2146
显然8251与6105的最大公因数也必是2146的因数,同样6105与2146的公因数也必是8251的因数,所以8251与6105的最大公因数也是6105与2146的最大公因数。
6105=2146×2+1813
2146=1813×1+333
1813=333×5+148
333=148×2+37
148=37×4+0
则37为8251与6105的最大公因数。
求最大公约数迭代版算法。
参考网址:https://blog.youkuaiyun.com/qq_30866297/article/details/50969950

#include <stdio.h>
int main() {
    int a, b, r;
    printf("请输入两个正整数:\n");
    scanf("%d %d", &a, &b);
    //如果a<b,交换a和b的值
    if (a < b) {// 保证a > b
        r = a;
        a = b;
        b = r;
    }
    r = b; //r初始化为较小的数
    //辗转相除法,因为r的初始值不为0,所以while语句至少会执行一次
    //直至余数为零,跳出循环
    while (r != 0) {
        r = a%b;
        a = b;
        b = r;
    }
    //输出最大公约数
    printf("最大公约数为:%d\n", a);
    return 0;
}

3.求最小公倍数

最小公倍数 = 两整数的乘积 ÷ 最大公约数

AUTOSAR RTE配置实战:从ECU分区到Task映射的完整指南 本文提供了一份AUTOSAR RTE配置的完整实战指南。从创建ECU分区、定义OS任务,到实现Runnable Entity与Task的精确映射,详细解析了每一步的操作要点与常见陷阱。文章结合配置工具界面,旨在帮助开发者高效完成RTE配置,确保系统实时性与数据一致性,是掌握AUTOSAR核心开发流程的实用参考。 阅读详情

相关推荐

炼丹-Pyecharts: JupyterLab无法render_notebook

炼丹-Pyecharts: JupyterLab无法render_notebook问题描述Jupyter-Lab 环境下render_notebook显示空白 问题描述Jupyter-Lab 环境下render_notebook显示空白 首先需要使用pyecharts自带的config来申明一下使用pyecharts的运行环境 from pyecharts.globals import Curre...

MichaelZzzzz的博客 4687

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

LaTeX小白必看:TeX Live+TeXstudio保姆级安装教程(附清华镜像加速)

本文为LaTeX新手提供了一份详尽的TeX Live和TeXstudio安装指南。通过清华大学镜像站实现高速下载,并详细讲解了从下载、定制化安装到配置优化的每一步,帮助用户快速搭建稳定高效的本地LaTeX写作环境,轻松处理学术文档排版。

weixin_29214559的博客 413

leetcode:149. 直线上最多的点数

代码】leetcode149.直线上最多的点数。

OceanStar的博客 299

C# 进阶:打造WinForms中的动态交互式UserControl

本文深入探讨了如何在C# WinForms中创建动态交互式UserControl,以提升桌面应用的用户体验和代码复用性。通过剖析UserControl生命周期、事件体系,并结合一个可拖拽缩放的分割面板实战案例,详细讲解了鼠标键盘事件处理、自定义绘制、状态管理以及性能优化等核心技巧,帮助开发者封装复杂交互逻辑,打造专业级自定义控件。

weixin_29279153的博客 460

初级文章【西门子】字符拼接成字符串

针对S7-400极其以下PLC,1200往上据说有专门的块了呢,首先,我是不用库的,需要什么函数会自己写,OK进入正题。 首先,我们有一个DB块,里面有14个char,一个14位的char数组和一个14位的string。如下图。 我们的目的是将char1-char10拼接成一个string。 第一种方式:第一步,将char放进数组。 ​​​​​​​ 相信大家都能看明白,但是我还是要解释解释 L取值2 T赋值到临时变量DBNO(INT) OPN DB [#DBNO]获取DB块,这一句.

NS_Speak(IVAV) 1万+

Leetcode 149:直线上最多的点数(最详细的解法!!!)

给定一个二维平面,平面上有 n 个点,求最多有多少个点在同一条直线上。 示例 1: 输入: [[1,1],[2,2],[3,3]] 输出: 3 解释: ^ | | o | o | o +-------------&gt; 0 1 2 3 4 示例 2: 输入: [[1,1],[3,2],[5,3],[4,1],[2,3],[1,4]] 输出: 4 解释: ^ ...

coordinate的博客 5490

二阶FLL辅助三阶PLL环路的代码解读

今天对GNSS接收机里面的载波跟踪环路代码进行了解读 以下是个人的一点见解 % 载波环第二步:环路滤波器 二阶FLL辅助三阶PLL环路 carrLoopS0 = lastCarrLoopS0 + (phaseErr*tau0PLL + freqErr*tau1FLL) * PDIcarr; carrLoopS1 = lastCarrLoopS1 + (tau1PLL*phaseErr + carrLoopS0 + tau2FLL*freqErr) * PD

LWN7321的博客 2629

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

2021.6.24号每日一题 文章目录题目链接题目简介题目解析题目代码 题目链接 149. 直线上最多的点数 题目简介 给你一个数组 points ,其中 points[i] = [xi, yi] 表示 X-Y 平面上的一个点。求最多有多少个点在同一条直线上。 示例 1: 输入:points = [[1,1],[2,2],[3,3]] 输出:3 题目解析 给定一些点,求哪些点在一条直线上 常见的做法有两种: 第一种:计算每个点和其他点的斜率比(y2 - y1)/ (x2 - x1),将斜率比按 .

爱敲代码的小黄 574

给麒麟KylinOS服务器加把锁:手把手配置符合等保要求的密码强度策略

本文详细介绍了如何在麒麟KylinOS服务器上配置符合等保要求的密码强度策略,包括pwquality.conf和login.defs的核心参数设置、等保合规的进阶配置技巧以及企业环境中的平衡艺术。通过实战案例和测试方法,帮助管理员构建坚固的密码防线,确保系统安全。

weixin_33749242的博客 418

Open3D DBSCAN聚类

DBSCAN算法做为一种有名的密度聚类算法,它是通过邻域参数(Distance,MinPts)来刻画样本分布的紧密程度。而在真正开始之前,首先要理解下面这几个概念:更为具体的内容也可参考这篇文章点云DBSCAN聚类算法。...

dayuhaitang1的博客 1795

LeetCode 149. 直线上最多的点数 / NC14 二叉树的之字形层序遍历 / NC37 合并区间

149. 直线上最多的点数 2021.6.24每日一题 题目描述 给你一个数组 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 来源:力扣(LeetCode) 链接:https://leetcode-cn.co

windyjcy的博客 289

第十二段:基于env的重用

现代芯片的验证通常分为两个层次, 一是模块级别( block level, 也称为IP级别、 unit级别) 验证, 二是芯片级别( 也称为SOC级别) 验证。 一个大的芯片在开发时, 是分成多个小的模块来开发的。 每个模块开发一套独立的验证环境, 通常每个模块有 一个专门的验证人员负责。 当在模块级别验证完成后, 需要做整个系统的验证。 假设某个系统分成了三个模块,如下图: 这三个模块在模块级别验证时, 分别有自己的driver和s...

年糕的博客 421

[LeetCode]149. Max Points on a Line

[LeetCode]149. Max Points on a Line题目描述思路对每个点,将所有可能的直线存储在map中,并记录直线上对应的点,每次返回点最多的个数 踩的坑: 1. 开始考虑存直线需要 y = k * x + b, 即需存储k, b两个值,后来想想,通过同一点的直线,只需要k即可确定,相同的k值代表相同的直线 2. k值存在为无穷大的问题,即直线与y轴垂直的时候。 3. k

Lcharon的博客 706

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

【leetcode】【hard】149. Max Points on a Line

149.Max Points on a Line Givennpoints on a 2D plane, find the maximum number of points that lie on the same straight line. Example 1: Input: [[1,1],[2,2],[3,3]] Output: 3 Explanation: ^ | | ...

lemonade13的博客 127

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

LeetCode 149. Max Points on a Line

LeetCode 149. Max Points on a Line

CristinaE的博客 388

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

[LeetCode]Max Points on a Line

Given n points on a 2D plane, find the maximum number of points that lie on the same straight line. [LeetCode Source] 思路:对每一个节点求和其他节点的斜率,用hash_map统计斜率相同的点数。时间O(N^2),空间O(N)。应该有更简单可以在O(1)空间的算法,暂时没想出

CiaoLiang的专栏 629

149 Max Points on a Line

做这道题是看到一亩三分地的面经,PhD找Uber SE 暑期实习,卧槽面了两道hard和一道系统设计,果然要求不一样,估计工资也不同吧。。。 此题为hard:1是因为解法不明显,2找到解法后还有些细节要处理,具体见代码。一开始是没有思路的,参考了code ganker大神的代码,重新实现一遍,也改了一个小瑕疵,就是加了 (long),不加的话leetcode上最后3个test case跑不过,于

laserljy123的博客 327

leetcode 149. Max Points on a Line

Givennpoints on a 2D plane, find the maximum number of points that lie on the same straight line. Example 1: Input: [[1,1],[2,2],[3,3]] Output: 3 Explanation: ^ | | o | o | o +-----...

PaladinDu的专栏 169

【LeetCode 149.】 Max Points on a Line

题目大意: 给出一组点的二维坐标,求最多的在一条直线上的点的个数。 思路: 遍历点,计算经过每个点的斜率的最多的数量。注意重复的点。 最后取所有点的最大值。 不懂为什么只计算当前点和之后的点,结果和当前点和所有点的斜率是一样的。 代码: class Solution { public: int maxPoints(vector<vector<int>>& p...

iCode_girl的博客 165

LeetCode(149)Max Points on a Line

题目如下: Given n points on a 2D plane, find the maximum number of points that lie on the same straight line. 思考分析: 一开始,我觉得这道题不是考算法的,题目确实不涉及算法的内容。但是后来,我交了很久才成功,才明白这道题的坑点在于corner cases. 首先看解题方法。

BUILD 3397

Max Points on a Line(leetcode)

题目:

u010585135的专栏 507

LeetCode-149.Max Points on a Line

https://leetcode.com/problems/max-points-on-a-line/ Given n points on a 2D plane, find the maximum number of points that lie on the same straight line. 开始除了暴力破解没想到什么解决方案,暴力破解就是随机取两个点,判断其他的点在这两

MSP_甄心cherish的专栏 768

Max Points on a Line

Max Points on a Line 题目链接:http://oj.leetcode.com/problems/max-points-on-a-line/   Given n points on a 2D plane, find the maximum number of points that lie on the same straight line. 题目大意:给定n个...

weixin_34102807的博客 107

Leetcode 149. Max Points on a Line

原题:Given n points on a 2D plane, find the maximum number of points that lie on the same straight line.解题方法:从解题方法来看,没有什么特殊的,依次计算每一个点跟其他点的斜率,然后统计数量最多的斜率,这可以在一个哈希表的辅助下完成。但有下面几个细节需要注意:- 重复点需要统计,不要漏掉了。- 与y...

muche001的专栏 135

LeetCode每日一题(149. Max Points on a Line)

这样整体的流程基本就完了, 但是还有个细节问题就是(xj - xi)可能为 0, 这样(yj - yi) / (xj - xi)就会 panic, 我们需要用一个特殊的值来保存这种无限大的斜率, 我们继续看题目的约束, 里面提到了-10^4

wangjun861205的博客 202
上一篇: LeetCode 68. Text Justification
下一篇: 【重点】【大数算法】剑指offer——面试题12:打印1到最大的n位数
Allenlzcoder
博客等级 码龄10年 925粉丝 512原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值