Max Points on a Line
2015-10-11 01:48
274 查看
Given n points
on a 2D plane, find the maximum number of points that lie on the same straight line.
on a 2D plane, find the maximum number of points that lie on the same straight line.
/** * 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() <= 1) { return points.size(); } vector<double> radius; vector<vector<unsigned> > lines; vector<vector<unsigned> > duplication(points.size()); unsigned i = 0, j; vector<bool> ignor(points.size(), false); for (; i < points.size(); i++) { if (ignor[i]) { continue; } vector<unsigned> dup; dup.empty(); dup.push_back(i); for (j = i + 1; j < points.size(); j++) { double a; if (points[i].x == points[j].x) { if (points[i].y == points[j].y) { dup.push_back(j); ignor[j] = true; continue; } a = INT_MIN; } else { a = (double)(points[i].y - points[j].y) / (double)(points[i].x - points[j].x); } if (radius.size() == 0) { vector<unsigned> tp; tp.push_back(i); tp.push_back(j); lines.push_back(tp); radius.push_back(a); } else { unsigned z = 0, m, n; bool sameline = false, has = false; for (; z < radius.size(); z++) { if (radius[z] == a) { for (m = 0; m < lines[z].size(); m++) { if (lines[z][m] == i) { sameline = true; for (n = m + 1; n < lines[z].size(); n++) { if (lines[z] == j) { has = true; break; } } if (!has) { lines[z].push_back(j); } break; } } } if (sameline) break; } if (!sameline) { vector<unsigned> tp; tp.push_back(i); tp.push_back(j); lines.push_back(tp); radius.push_back(a); } } } duplication[i]=dup; } unsigned max = 0; for (i = 0; i < lines.size(); i++) { unsigned total = 0; if (!ignor[lines[i][j]]) { total += duplication[lines[i][j]].size() - 1; } max = lines[i].size() + total > max ? lines[i].size() + total : max; } return max; } };
相关文章推荐
- 对象池的设计及其实现
- TCP_NODELAY
- <img src=i onerror=alert(document.cookie)>
- jQuery 源码 : queue 主要针对animate这个操作
- 打造APP引导页3D切换特效
- 动态规划算法——矩阵连乘问题
- 中缀表达式转换成后缀表达式
- 20135220谈愈敏--信息安全系统设计基础第四周学习总结
- cf#307-D. GukiZ and Binary Operations-矩阵快速幂
- BC#59 (div.2)
- 自定义Switch——第一次写博客
- HDU 5499 【水】
- 关于UICollectionView的几点认识
- PyQt5程序(三)
- ubuntu 14.04 无法识别声卡
- 111<img src=hi onerror=alert(document.cookie)>
- Weak、Strong、assign 和 autorelease + 1道面试题
- stm32 NVIC中断管理实现[直接操作寄存器]
- [ReactNative入门到精通]React Native概述
- 数据库日志管理