题目

在二维平面上,有一些点,请找出经过点数最多的那条线。

给定一个点集vectorp和点集的大小n,没有两个点的横坐标相等的情况,请返回一个vector,代表经过点数最多的那条直线的斜率和截距。

解法

自己的想法是两个点计算斜率与截距,然后另写个函数判断剩下的点到这条直线的距离。但是仔细想想复杂度还是太高了,所以采用map存储的方式:

/*
struct Point {
int x;
int y;
Point() :
x(0), y(0) {
}
Point(int xx, int yy) {
x = xx;
y = yy;
}
};*/
class DenseLine {
public:
vector<double> getLine(vector<Point> p, int n) {
map<pair<double, double>, int > lines;
for(int i = 0; i < n; i++){
for(int j = i+1; j < n; j++){
++lines[calLine(p[i],p[j])];
}
}
auto it = lines.begin();
auto maxLine = it;
int max = 0;
while(it != lines.end()){
if(it->second > max) maxLine = it;
it++;
}
vector<double> res;
res.push_back(maxLine->first.first);
res.push_back(maxLine->first.second);
return res;
} pair<double, double> calLine(Point p1,Point p2){
double k = (double)(p1.y - p2.y)/(double)(p1.x - p2.x);
double s = (double)p1.y - (double)k*p1.x;
return make_pair(k,s);
}
};

pair可以将两个值视为一个单元。容器类别map和multimap就是使用pairs来管理其健值/实值(key/value)的成对元素.

最新文章

  1. 浅析.NET的反射特性
  2. SparkStreaming运行出现 java.lang.NoClassDefFoundError: org/apache/htrace/Trace 错误
  3. Win7 64位 VS2013环境编译boost1_58_0
  4. Angularjs,WebAPI 搭建一个简易权限管理系统 —— Angularjs 前端主体结构(五)
  5. c语言作业
  6. PHP实现简单的学生信息管理系统(web版)
  7. 转载网易博客:整理各大网站让网站变灰的css代码
  8. poj2243
  9. 升级到 ExtJS 5的过程记录
  10. Firefox 备份
  11. 阿里云SLB出现502 Bad Gateway 错误排查解决方法
  12. PHP等值判断中,常量与变量在左在右的区别
  13. C# 利用SharpPcap实现网络包捕获嗅探
  14. C#语言————选择结构
  15. Dockerfile 收集
  16. BZOJ 3609: [Heoi2014]人人尽说江南好
  17. SOALog
  18. Django:如何给文章列表添加图片
  19. Asis CTF 2015-Car_Market
  20. Eclipse git pull 报Nothing to fetch 异常原因

热门文章

  1. 对于glut和freeglut的一点比较和在VS2013上的配置问题
  2. 分享知识-快乐自己:SpringBoot 使用注解API的方式定义启动端口号
  3. 分享知识-快乐自己:SpringMvc中 页面日期格式到后台的类型转换
  4. HihoCoder1673 : 01间隔矩阵([Offer收割]编程练习赛41)(单调队列)
  5. kettle及数据库导数_20160920
  6. Block Change Tracking (块改变跟踪)
  7. IHE-PIX 备注
  8. 47: error: undefined reference to `QWebView::QWebView(QWidget*)'
  9. 选择排序(java)
  10. (十七)Spring 集成Quartz