[leetcode]Max Points on a Line
2017-01-18 17:11
393 查看
Problem Description
Link在平面图上给出n个点,求最多有多少点在同一条直线上。
Possible Solution
暴力
枚举两个点,固定一条直线。枚举所有点,看有多少点在这条直线上。时间复杂度 O(n^3)固定一点
固定一个点,枚举其他点,计算斜率,同一个斜率的一定在同一条直线上。复杂度O(n)统计同一个斜率有多少点的时候,本来想构造一个hash表。后面发现太麻烦了 。其实只需要把每个斜率存下来,然后sort一下, 再判断有多少个重复的k即可。
附代码:
/** * Definition for a point. * struct Point { * int x; * int y; * Point() : x(0), y(0) {} * Point(int a, int b) : x(a), y(b) {} * }; */ int ans; int dblcmp(double k) { if (fabs(k)<1e-6) return 0; if (k > 0) return 1; return -1; } class Solution { public: int maxPoints(vector<Point>& points) { int n = points.size(); if (n == 0) return 0; Point &p = points[0]; ans = 0; vector<double> v; int plus = 1; for (int i = 1; i < n; ++i) { Point &x = points[i]; if (x.x == p.x) { 4000 if (x.y == p.y) ++plus; else ++ans; } else { double k = double(x.y-p.y)/(x.x-p.x); v.push_back(k); } } std::sort(v.begin(), v.end()); int m = v.size(); for (int i = 0; i < m; ++i) { int j = i; while (i+1 < m && dblcmp(v[i+1] - v[j]) == 0 ) ++i; if (i-j+1 > ans) ans = i-j+1; } return ans+plus; } };
相关文章推荐
- LeetCode: Max Points on a Line
- [leetcode] 149. Max Points on a Line 解题报告
- [LeetCode]149 Max Points on a Line
- Max Points on a Line [leetcode]
- Leetcode 149. Max Points on a Line
- Leetcode: Max Points on a Line
- 【LeetCode】149. Max Points on a Line - javascript
- leetcode 149:Max Points on a Line(java实现)细致分析
- LeetCode 3 Max Points on a Line
- leetcode之Max Points on a Line
- Max Points on a Line Leetcode Python
- LeetCode Max Points on a Line
- Max Points On a Line--leetcode
- LeetCode: Max Points on a Line
- leetcode Max Points on a Line(*)
- LeetCode:Max Points on a Line
- leetcode3题解 Max Points on a line
- Leetcode: Max Points on a Line 分析理解
- 【LeetCode】Max Points on a Line
- LeetCode 149 — Max Points on a Line(C++ Java Python)