博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LeetCode] Max Points on a Line
阅读量:5256 次
发布时间:2019-06-14

本文共 2368 字,大约阅读时间需要 7 分钟。

Given n points on a 2D plane, find the maximum number of points that lie on the same straight line.

Solution:

/** * 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:    double PI = 3.1415926;        double computeAngle(int x, int y, int xx, int yy){  if(x == xx)  {    if(y == yy)      return 2 * PI;    else      return PI;  }  else    return atan((double)(yy - y) / (xx - x));}int maxPoints(vector
&points) { int n = points.size(); if(n <= 2) return n; double **angle = new double*[n + 1]; int **visited = new int*[n + 1]; for(int i = 0;i < n;i++) { angle[i] = new double[n + 1]; visited[i] = new int[n + 1]; } for(int i = 0;i < n;i++) { memset(visited[i], 0, (n + 1) * sizeof(int)); for(int j = i;j < n;j++) angle[i][j] = angle[j][i] = computeAngle(points[i].x, points[i].y, points[j].x, points[j].y); } int max = 2; for(int i = 0;i < n;i++) { for(int j = 0;j < n;j++) { if(i == j || visited[i][j] == 1) continue; visited[i][j] = 1; //define a line by point i and j double curAngle = angle[i][j]; int curNum = 2; for(int k = 0;k < n;k++) { if(i != k && j != k) { if(curAngle == 2 * PI) { if(angle[i][k] == 2 * PI || angle[j][k] == 2 * PI) { curNum++; } else { curNum++; curAngle = angle[i][k]; visited[i][k] = visited[j][k] = visited[k][j] = visited[k][i] = 1; } } else { if(angle[i][k] == curAngle) { curNum++; visited[i][k] = visited[j][k] = visited[k][j] = visited[k][i] = 1; } } } } // cout << i << " " << j << " :" <
<< endl; max = (curNum > max) ? curNum : max; } } return max; }};

转载于:https://www.cnblogs.com/changchengxiao/p/3671853.html

你可能感兴趣的文章
PHP 相关软件下载
查看>>
[转]ASP.NET MVC中的两个Action之间值的传递--TempData
查看>>
整流桥
查看>>
接口 抽象类 继承 的 作用
查看>>
postman接口测试:添加信息
查看>>
python Excel操作
查看>>
eclipse乱码解决
查看>>
Selenium 库的基本用法
查看>>
Linux 删除指定大小(范围)的文件
查看>>
Minor GC ,Full GC 触发条件
查看>>
「模板」 01 Trie实现平衡树功能
查看>>
蓝桥杯-扑克牌移动-java
查看>>
怎样招聘出色的产品经理
查看>>
JAVA--------------华为------------统计大写字母个数 (水题)
查看>>
hdfs做完ha后,impala无法查询数据
查看>>
Android 反射-换一种方式编程
查看>>
1.创建maven 项目 动态web工程完整示例
查看>>
Linux命令
查看>>
PHP性能优化利器:生成器 yield理解
查看>>
codevs1044四子连棋(Dfs)
查看>>