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

    每次固定一个点,然后遍历所有其它点,记录每种斜率出现的次数。需要考虑两种特殊情况:斜率不存在和点与固定点重合。

     1 /**
     2  * Definition for a point.
     3  * struct Point {
     4  *     int x;
     5  *     int y;
     6  *     Point() : x(0), y(0) {}
     7  *     Point(int a, int b) : x(a), y(b) {}
     8  * };
     9  */
    10 class Solution {
    11 public:
    12     int maxPoints(vector<Point> &points) {
    13         int n = points.size();
    14         if (n <= 2) {
    15             return n;
    16         }
    17         int ans = 2;
    18         for (int i = 0; i < n - 1; ++i) {
    19             Point o = points[i];
    20             unordered_map<double, int> k_cnt;    //斜率出现计数
    21             int v_cnt = 0;        //垂直线上点计数(含重合点)
    22             int dup_cnt = 0;    //与固定点重合的点计数
    23             for (int j = i + 1; j < n; ++j) {
    24                 Point p = points[j];
    25                 if (p.x == o.x) {
    26                     ++v_cnt;    //垂直线上的点
    27                     if (p.y == o.y) {
    28                         ++dup_cnt;    //与固定点重合的点
    29                     }
    30                 }
    31                 else {
    32                     double k = ((double)p.y - o.y) / (p.x - o.x);
    33                     if (k_cnt.find(k) != k_cnt.end()) {
    34                         ++k_cnt[k];
    35                     }
    36                     else {
    37                         k_cnt[k] = 1;
    38                     }
    39                 }
    40             }
    41             for (auto &c : k_cnt) {
    42                 if (c.second + dup_cnt + 1 > ans) {
    43                     ans = c.second + dup_cnt + 1;
    44                 }
    45             }
    46             if (v_cnt + 1 > ans) {
    47                 ans = v_cnt + 1;
    48             }
    49         }
    50         return ans;
    51     }
    52 };
  • 相关阅读:
    python2中的SSL:CERTIFICATE_VERIFY_FAILED错误的解决办法
    head first 设计模式第一章笔记
    pycharm设置python脚本模板
    zip的压缩和解压命令
    js数组和集合互转
    查看Oracle的连接数
    转 小辉_Ray DOM性能小记
    学习总结之javaScript document对象详解
    MySQL 表的一些操作
    MySQL 的一些操作
  • 原文地址:https://www.cnblogs.com/dengeven/p/3778648.html
Copyright © 2011-2022 走看看