Leetcode_max-points-on-a-line(c++ and python version)
来源:互联网 发布:信息技术软件应用方法 编辑:程序博客网 时间:2024/06/09 20:46
地址:http://oj.leetcode.com/problems/max-points-on-a-line/
Given n points on a 2D plane, find the maximum number of points that lie on the same straight line.、
思路:brute ways,O(N^2)时间复杂度。
如果x轴坐标一致:
1. Y轴坐标也一样的话就是同一个点,用same标记
2. Y轴坐标不一样,在一条垂直线上,用vertical标记
如果x轴坐标不一样,则可以计算斜率:
3. 以任一个点(遍历)为起点,计算其与每一个点的斜率。斜率用hash表(字典)来存储。
其中3和2值中的较大值加上1值即为结果
c++ 参考代码:
/** * 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.empty()) return 0; unordered_map<double, int>dm; int ans = 0, vertical = 0, same = 0, maxdm = 0; double dslope = 0.0; for(int i = 0; i<points.size(); ++i) { dm.clear(); dslope = vertical = same = maxdm = 0; for(int j = 0; j<points.size(); ++j) { if(points[i].x==points[j].x) { if(points[i].y==points[j].y) ++same; else ++vertical; } else { dslope = (double)(points[j].y-points[i].y) / (points[j].x-points[i].x); ++dm[dslope]; maxdm = max(maxdm, dm[dslope]); } } ans = max(ans, max(vertical, maxdm)+same); } return ans; }};
python参考代码:
# Definition for a point# class Point:# def __init__(self, a=0, b=0):# self.x = a# self.y = bclass Solution: # @param points, a list of Points # @return an integer def maxPoints(self, points): if not points:return 0 ans = 0 slope = 0.0 for i in points: dict = {} maxdict = vertical = same = 0 for j in points: if i.x==j.x: if i.y==j.y: same += 1 else: vertical += 1 else: slope = float(j.y-i.y) / (j.x-i.x) if dict.has_key(slope): dict[slope] += 1 else: dict[slope] = 1 maxdict = max(maxdict, dict[slope]) ans = max(ans, max(maxdict, vertical)+same) return ans
//SECOND TRIAL, almost the sameclass Solution {public:int maxPoints(vector<Point> &points) {if(points.empty())return 0;else if(points.size()<=2)return points.size();int same = 0, vertical = 0, slope_cnt = 0, ans = 0;float slope;unordered_map<float, int>mp;for(int i = 0; i<points.size(); ++i){same = vertical = slope_cnt = 0;mp.clear();for(int j = 0; j<points.size(); ++j){if(j != i){if(points[j].x == points[i].x){if(points[j].y==points[i].y)++same;else++vertical;}else{slope = float(points[j].y - points[i].y) / (points[j].x - points[i].x);++mp[slope];if(mp[slope] > slope_cnt)slope_cnt = mp[slope];}}}ans = max(ans, 1+same+max(slope_cnt, vertical));}return ans;}};
0 0
- Leetcode_max-points-on-a-line(c++ and python version)
- leetcode_Max Points on a Line
- LeetCode-Max Points on a Line (Python)
- 【leetcode】Max Points on a Line (python)
- Max Points on a Line Leetcode Python
- [Leetcode][python]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
- Android访问WebService-CXF步骤
- 类目、扩展和协议
- ZOJ 3708 Density of Power Network
- HDU 1290 献给杭电五十周年校庆的礼物
- 学习总结--委托和事件
- Leetcode_max-points-on-a-line(c++ and python version)
- CodeForces 347 A. Difference Row
- 点类派生直线类
- JavaScript实现弹窗报错
- web前端开发与页面设计的协作、区别与发展
- 读《魔鬼搭讪学》有感
- Darwin Streaming Server 核心代码分析
- 字符串反转
- 电影汇总