Max Points on a Line
来源:互联网 发布:linux 关闭mysql服务 编辑:程序博客网 时间:2024/06/05 17:07
https://leetcode.com/problems/max-points-on-a-line/
计算三个点是不是在一个连线上,三个点需要满足(y2-y1)/(x2-x1)=(y3-y2)/(x3-x2)如果x2=x3=x1则表示三点在同一条垂直连线上。如果x1=x2=x3&&y1=y2=y2那么表示三个点是同一个点。
因此在计算的时候需要考虑两点的x坐标是否相等。
本题的思路是,从每一个点p出发计算他和其他点q的斜率,如果斜率相等则表示这几点在同一个连线上,更新从该点p出发的同一条直线上最大的点的数量。更新的时候需要考虑相同的点。
时间复杂度是O(n2)
/** * 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; int maxPoints=0; for(int i=0;i<points.size();i++){ int iMax=0,iVer=0,iSame=0; unordered_map<float,int> gradients; for(int j=i+1;j<points.size();j++){ if(points[j].x==points[i].x){ if(points[j].y==points[i].y) iSame++; else iVer++; continue; } float gradient=(float)(points[j].y-points[i].y)/(float)(points[j].x-points[i].x); if(gradients.find(gradient)==gradients.end()) gradients.insert(pair<float,int>(gradient,1)); else gradients[gradient]++; iMax=max(iMax,gradients[gradient]); } iMax=max(iMax,iVer)+iSame+1; maxPoints=max(iMax,maxPoints); } return maxPoints; }};
0 0
- Max Points on a Line
- Max Points on a Line
- Max Points on a Line
- Max Points on a Line
- Max Points on a Line
- Max Points on a Line
- Max Points On a Line
- Max Points on a Line
- Max Points on a Line
- Max Points on a Line
- max points on a line
- Max Points on a Line
- Max Points on a Line
- Max Points on a Line
- Max Points on a Line
- Max Points on a Line
- Max Points on a Line
- Max Points on a Line
- Java——用户界面的布局
- 拍照、相册及裁剪的终极实现(二)——相册选择及裁剪功能实现
- 2016.9.24 JSP页面传值中文乱码
- git学习
- jquery 电影票选座
- Max Points on a Line
- 正则表达式判断日期格式
- Excel Sheet Column Number(Excel表列的数字)
- 迷你Dvd管理器案例
- uboot第一阶段代码(3)
- 6.17
- 「微信小程序」有哪些冲击与机会?
- SQL学习资料01
- FREEMARKER使用出错