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

解法:

类似于leetcode:Max Points on a Line

我们只需在任意两点之间“画”一条无限长的直线(也即不是线段),并利用散列表追踪哪条直线出现的次数最多。这种做法的时间复杂度O(n^2),因为一共有n^2条线段。

通过将每一个点与除了自己之外的每一点求斜率(要注意相等和斜率不存在的情况),使用unorder_map中来插入k值,并对相同的k值进行累加,累加一次相当于增加该直线上的一个点。主要思想就是一条直线上的任意一点与其他点求得的k值都相等,因此,可以利用任意一点与其他每个点求斜率来计算求得的斜率上点的数量。

C++实现代码:

#include<iostream>
#include<unordered_map>
#include<vector>
#include<climits>
using namespace std; struct Point
{
int x;
int y;
Point():x(),y(){}
Point(int a,int b):x(a),y(b){}
}; int maxPoints(vector<Point> &points)
{
if(points.empty())
return ;
int n=points.size();
int i,j;
int maxnum=;
unordered_map<double,int> mp;
for(i=;i<n;i++)
{
int duplicate=;
mp[INT_MAX]=;
mp.clear();
for(j=;j<n;j++)
{
if(i==j)
continue;
if(points[i].x==points[j].x&&points[i].y==points[j].y)
{
duplicate++;
continue;
}
double k=(points[i].x==points[j].x?INT_MAX:(double)(points[i].y-points[j].y)/(points[i].x-points[j].x));
mp[k]++;
}
auto mp_iter=mp.begin();
while(mp_iter!=mp.end())
{
if(mp_iter->second+duplicate>maxnum)
maxnum=mp_iter->second+duplicate;
mp_iter++;
}
}
return maxnum;
} int main()
{
vector<Point> vec={Point(,),Point(,),Point(,),Point(,),Point(,),Point(,)};
cout<<maxPoints(vec)<<endl;
}

最新文章

  1. 算法是什么我记不住,But i do it my way. 解一道滴滴出行秋招编程题。
  2. FFMpeg video duration
  3. C++中new和delete的背后
  4. [转]Backbone.js简单入门范例
  5. C++中public,protected,private派生类继承问题和访问权限问题
  6. HDU 2818 (矢量并查集)
  7. css 层叠样式表
  8. 一次数据库hang住的分析过程
  9. ASP.NET MVC的TempData(转载)
  10. setTimeOut() 和 setTimeInterval()
  11. (转)SqlServer中处理每天四亿三千万记录的
  12. Ajax条用WebService 5星级
  13. (hdu)5547 Sudoku (4*4方格的 数独 深搜)
  14. M - Escape - HDU 3605 - (缩点+最大流SAP)
  15. BZOJ 1475: 方格取数( 网络流 )
  16. QtWebKit/QtWebEngine移植差异(网摘)
  17. JavaScript基本语法2
  18. Visual paradigm软件介绍
  19. [转载] Thrift-server与spring集成
  20. maven 项目提示找不到javax.servlet.xxx问题解决

热门文章

  1. Protel封装库
  2. 函数xdes_find_bit
  3. [ECNU 1624] 求交集多边形面积
  4. 按CTRL,SHIFT,ALT等键扩展easyui的datagrid多选实现
  5. VC一些经验系列: 《分享泄漏检测工具:内存、DC、GDI、Handle... 》
  6. C# 如何获取某个类型或类型实例对象的大小
  7. 转载--C++ STL
  8. Codeforces 14D
  9. Oracle 12c创建用户时出现“ORA-65096: invalid common user or role name”的错误
  10. [liu yanling]软件测试的分类