zoukankan      html  css  js  c++  java
  • [leetcode]Max Points on a Line

    给出平面上的点,问一条直线最多穿过几个点.

    要不是之前看过这个题的题解,我感觉可能会一点想法都木有...

    我可能会去,枚举两个点,然后再枚举其他点是否在这个直线上,O(n^3).

    实际上呢,我们只需要枚举一个点,然后再枚举其他点和这个点构成的斜率.

    既然斜率相同,而且过一个点,当然在一个直线上啦.

    然后找出构成的所有的斜率里面点最多的那个就ok啦.

    不过要注意处理的是:

    1,没有点

    2,相同点(题意似乎是算做n个而不是一个)

    3,斜率的话要注意垂直

    /**
     * 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) {
            if(points.size() == 0) return 0;
            unordered_map<double , int> count;
            int size = points.size();
            int ans = 0;
            for(int i = 0 ; i < size ; i++){
                int x = points[i].x;
                int y = points[i].y;
                int du = 0;
                count.clear();
                count[(double)INT_MIN] = 0;
                for(int j = 0 ; j < size ; j++){
                    if(i != j){
                        int x1 = points[j].x;
                        int y1 = points[j].y;
                        if(x == x1 && y == y1){
                            du++;
                        }else if(x == x1){
                            count[(double)INT_MAX] ++;
                        }else{
                            double k = (double)(y1-y) / (double)(x1-x);
                            count[k]++;
                        }
                    }
                }
                
                for(auto it = count.begin() ; it != count.end() ; it++){
                    if(it -> second + du> ans){
                        ans = it -> second + du;
                    }
                }
                
            }
            return ans + 1;
        }
    };
  • 相关阅读:
    理解python多个参数*args
    物联网MQTT 协议测试
    python 自动化测试人工智能
    Django 初识
    算法排序
    python教程笔记GUI wxpython
    python入门教程学习笔记#3 基础部分
    python入门教程学习笔记#1 安装准备
    2012-2013 Northwestern European Regional Contest (NWERC 2012)
    2017 Benelux Algorithm Programming Contest (BAPC 17)
  • 原文地址:https://www.cnblogs.com/x1957/p/3491872.html
Copyright © 2011-2022 走看看