Max Points on a Line
来源:互联网 发布:单片机地址总线 编辑:程序博客网 时间:2024/05/01 15:42
基本思路就是两点确定一条直线,所以找出points的两两组合,然后再判断剩余的点是否在当前两两组合所产生的直线上,最后就可以得出当前直线上所有的点的个数。
思路很简单,但关键要注意一个陷阱:给出的点集合中可能有重复的点,所以一定要去重,记录下每个点重复出现的次数。这样就可以比较好的解决这个问题了。
bool cmp(const Point& p1,const Point& p2) { if(p1.x!=p2.x) { return p1.x<p2.x; } return p1.y<p2.y; } void mySort(vector<Point>& points) { int n=points.size(); for(int i=1;i<n;++i) { int j=i-1; Point tmp(points[i].x,points[i].y); while((j>=0)&&(cmp(tmp,points[j]))) { points[j+1].x=points[j].x; points[j+1].y=points[j].y; j--; } points[j+1].x=tmp.x; points[j+1].y=tmp.y; } } bool equal(const Point& p1,const Point& p2) { if((p1.x==p2.x)&&(p1.y==p2.y)) { return true; } else { return false; } } int nextPos(int start,const vector<Point>& points) { int res=start+1; while((res<points.size())&&(equal(points[start],points[res]))) { res++; } return res; }class Solution {public: int maxPoints(vector<Point> &points) { int sz=points.size(); if(sz<3) { return sz; } //mySort(points);sort(points.begin(),points.end(),cmp); int newSz=0; vector<int> count(sz,0); int i=0; while(i<sz) { int nextI=nextPos(i,points); int iSz=nextI-i; //fillPos=i+1; points[newSz]=points[i]; count[newSz]=iSz; newSz++; i=nextI; } if(newSz<3) { int res=0; for(int i=0;i<newSz;++i) { res+=count[i]; } return res; } int max=0; for(int i=0;i<newSz;++i) { for(int j=i+1;j<newSz;++j) { int tmp=count[i]+count[j]; for(int k=0;k<newSz;++k) { if((k!=i)&&(k!=j)) { if(((points[i].y-points[j].y)*(points[i].x-points[k].x))==((points[i].y-points[k].y)*(points[i].x-points[j].x))) { tmp+=count[k]; } } } if(tmp>max) { max=tmp; } } } return max; }};
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
- 怎么确定一个变量的类型
- hdu,2050,折线分割平面
- 学术休假---100~999中的水仙花数
- 游戏服务器构架优秀文章(转载)
- Java - Warning: Unchecked cast from object to array list
- Max Points on a Line
- Maven学习笔记(八)Maven的入门使用—2.编写主代码
- CSS中如何使父DIV内部的DIV垂直居中对齐!!!!
- 阿里巴巴网站推广——扬州渠道中心
- 宽带连接错误的处理办法
- NDK下获取IEIM并且使用MD5算法加密
- APB_IIS模块DUT&Testbench实践
- SimpleDateFormat
- Maven学习笔记(八)Maven的入门使用—3.编写测试代码