zoukankan      html  css  js  c++  java
  • 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.

    Analysis:

      This approach cost time complexity O(n^3).  

      1. If points less than 2 or all points locate at the same position, just output the points number.

      2. Find two points with different coordinates and check how many points other than these two are in this line. 

      3. Traverse all the points.  Keep updating the max points number.

    Code:

    /**
     * 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:
        bool allSamePoints(vector<Point> &points){
            for(int i=1;i<points.size();i++)
                if(points[i].x==points[i-1].x && points[i].y==points[i-1].y) return true;
                else  return false;
        }
        bool sameLine(Point i, Point j, Point k){
            return ((i.y-j.y)*(i.x-k.x)-(i.y-k.y)*(i.x-j.x))==0;
        }
        int maxPoints(vector<Point> &points) {
            if(points.size()<=1||allSamePoints(points))
                return points.size();
            int maxPoints = 2;    
            for(int i=0;i<points.size();i++){
                for(int j=i+1;j<points.size();j++){
                    if(points[i].x!=points[j].x||points[i].y!=points[j].y){
                        int n=2;
                        for(int k=0;k<points.size();k++){
                            if(k!=i&&k!=j&&sameLine(points[i],points[j],points[k]))
                                n++;
                        }
                        maxPoints=max(maxPoints,n);
                    }
                }  
            }
            return maxPoints;
        }
    };
  • 相关阅读:
    Django-model聚合查询与分组查询
    Django-model基础
    tempalte模板
    Nginx配置TCP请求转发
    使用python调用email模块发送邮件附件
    将txt文本转换为excel格式
    Linux系统
    Aws云服务EMR使用
    SHELL打印两个日期之间的日期
    02-模板字符串
  • 原文地址:https://www.cnblogs.com/winscoder/p/3473032.html
Copyright © 2011-2022 走看看