Max Points on a Line

题意:给定n个二维平面上的点,找到某条直线让该直线穿过的点最多,并求出点的个数。

我的想法:

固定两个点作为一条直线,然后遍历其他的点看是否在这条直线上,一边遍历一边记录。最后把该直线上的点数和之前的最大点数进行比较,并取较大者。然后取下一条直线进行相同的操作,但要注意重复的情况,不然会超时。

思路很简单,三个循环便可以完成,时间复杂度达到了n^3。

贴上代码:

class Solution {
public:
    int maxPoints(vector<Point>& points)
    {
        int maxNum = 0;
        if(points.size() < 3)return points.size();
        for(int i = 0;i < points.size();i++)
        {
            for(int j = i + 1;j < points.size();j++)
            {
                int temMax = 2;
                while(points[j].x == points[i].x && points[j].y == points[i].y)  //固定的两个点相同,则继续往下取,而且temMax加一
                {
                    j++;
                    if(j == points.size())
                        break;
                    temMax++;
                }
                for(int k = j + 1;k < points.size();k++)
                {
                    if(points[k].x == points[i].x && points[k].y == points[i].y)
                        temMax++;
                    else if(points[k].x == points[j].x  && points[k].y == points[j].y)
                        temMax++;
                    else if(getK(points[i], points[k]) == getK(points[i], points[j]))
                        temMax++;
                }
                if(temMax > maxNum)
                    maxNum = temMax;
            }
        }
        return  maxNum;
    }
private:
    double getK(Point a, Point b)
    {
        if(a.x == b.x)return MAX_INPUT;
        double k;
        k = (double)(a.y - b.y)/(double)(a.x - b.x);
        return k;
    }
};

需要注意的地方:

1、提交了之后才发现给的测试用例里面有重复的点,大家记得处理这种情况;

2、处理斜率不存在的情况;

3、点的个数小于3时直接输出

时间: 2024-10-06 03:26:44

Max Points on a Line的相关文章

【leetcode】Max Points on a Line (python)

给定一个点,除该点之外的其他所有点中,与该点的关系要么是共线,要么就是共点,也就是两点重合. 共线有三种情况:水平共线,垂直共线,倾斜的共线.合并下这三种情况就是斜率存在的共线和斜率不存在的共线. 那么我们的任务就是针对每个点,找出与其共线的这些情况中,共线最多的点的个数. 注意:最终的结果别忘了加上共点的个数. class Solution: def maxPoints(self, points ): if len( points ) <= 1: return len( points ) ma

【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. 题解: 思路比较简单,每条直线都可以表示为y=kx+b,所以对于任意三点,如果它们共线,那么它们中任意两点的斜率都相等. 所以就遍历points数组,对其中的每一个元素计算它和位于它后面的数组元素的斜率并保存在一个hashmap中. 这个hashmap的键就是两点构成直线的斜率,值就是和当前元素po

[LeetCode][JavaScript]Max Points on a Line

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. 求有多少点在一直线上. 粗暴地用二重循环遍历. 每一轮都构造一个哈希表,用来记录斜率,斜率k = (y1 - y2) / (x1 - x2). 注意到特殊情况: 1.两点重合,用countSamePoint记下重复的点,最后加到结果上. 2.两点与X轴平行,

LeetCode:Max Points on a line

题目: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. 这道题需要稍微转变一下思路,用斜率来实现,试想找在同一条直线上的点,怎么判断在一条直线上,唯一的方式也只有斜率可以完成,我开始没想到,后来看网友的思路才想到的,下面是简单的实现:其中有一点小技巧,利用map<double, int>来存储具有相同斜率

Max Points on a Line leetcode java

题目: Given n points on a 2D plane, find the maximum number of points that lie on the same straight line. 题解: 这道题就是给你一个2D平面,然后给你的数据结构是由横纵坐标表示的点,然后看哪条直线上的点最多. (1)两点确定一条直线 (2)斜率相同的点落在一条直线上 (3)坐标相同的两个不同的点 算作2个点 利用HashMap,Key值存斜率,Value存此斜率下的点的个数.同时考虑特殊情况,如

[LeetCode OJ] 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.

//定义二维平面上的点struct Point { int x; int y; Point(int a=0, int b=0):x(a),y(b){} }; bool operator==(const Point& left, const Point& right) { return (left.x==right.x && left.y==right.y); } //求两个点连接成的直线所对应的斜率 double line_equation(const Point&

LeetCode: Max Points on a Line 解题报告

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. SOLUTION 1: 全部的点扫一次,然后计算每一个点与其它点之间的斜率. 创建一个MAP, KEY-VALUE是 斜率:线上的点的数目. 另外,注意重合的点,每次都要累加到每一条线上. 注意: 1. k = 0 + (double)(points[i].

[leetcode]Max Points on a Line @ Python

原题地址:https://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. 解题思路:找到平面上在一条直线上最多的点.点在同一条直线上意味着这些点的斜率是一样的,那么可以考虑使用哈希表来解决,{斜率:[点1,点2]}这样的映射关系.这里有几个需要考虑

LeetCode OJ - 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. 解题思路: 第一反应:枚举两个点组成的直线,然后看其他的点在不在这条直线上,在此过程中统计最大值.此思路的复杂度 O(n^3) 参考了网上的思路:枚举第一个点,用unordered_map来记录其余的点和这个点的斜率,若斜率相同则代表这些点在同一直线上.避免double问题,把斜率转化成化简

Max Points on a Line (Python)

[问题] Given n points on a 2D plane, find the maximum number of points that lie on the same straight line. [思路] 对每一个点,分别计算这个点和其他所有点构成的斜率,具有相同斜率最多的点所构成的直线,就是具有最多点的直线. [代码] class Point: def __init__(self, a=0, b=0): self.x = a self.y = b class Solution: