149. Max Points on a Line
来源:互联网 发布:js获取传入参数 编辑:程序博客网 时间:2024/06/08 09:46
原文链接:https://leetcode.com/problems/max-points-on-a-line/?tab=Description
Given n points on a 2D plane, find the maximum number of points that lie on the same straight line.
要求:求出平面n个点中,最多共线的点数。
方法:选定一个点,计算其他点与它的斜率,如果斜率不存在则记为最大值;如果相同点,则设置一个标志计数+1,在每轮计算后更新最大值。在选定新点后将重复标志、map初始化。
/** * Definition for a point. * class Point { * int x; * int y; * Point() { x = 0; y = 0; } * Point(int a, int b) { x = a; y = b; } * } */ public class Solution { public int maxPoints(Point[] points) { if (points.length < 3) return points.length; int max = 0;//用于返回的结果,即共线点的最大个数 Map<Double, Integer> map = new HashMap<Double, Integer>();//保存同一个斜率的点的个数 for (int i = 0; i < points.length; i++) {//以每一个点为固定点 map.clear(); int duplicate = 1;//记录跟固定点重合的个数 for(int j = 0 ; j < points.length; j++){//遍历其他点,求其与固定点之间的斜率 if (i == j) continue;//如果是自己,跳过 double slope = 0.0;//斜率 if (points[i].x == points[j].x && points[i].y == points[j].y) {//如果跟固定点重合 duplicate++; continue; } else if (points[i].x == points[j].x) {//如果跟固定点在同一条竖线上,斜率设为最大值 slope = Integer.MAX_VALUE; } else {//计算该点与固定点的斜率 slope = 1.0 * (points[i].y - points[j].y) / (points[i].x - points[j].x); } map.put(slope, map.containsKey(slope) ? map.get(slope) + 1 : 1); } //更新最优解 if (map.keySet().size() == 0) {//如果map为空 max = duplicate > max ? duplicate : max; } else { for (double key : map.keySet()) { max = Math.max((duplicate + map.get(key)), max); } } } return max; } }注意在计算斜率时,需要乘1.0,以进行数值的类型转换;
dulplicate初始值为1,map需要清空
0 0
- LeetCode 149. Max Points on a Line
- 149.Max Points on a Line
- 149. Max Points on a Line
- [leetcode] 149. Max Points on a Line
- leetcode 149. Max Points on a Line
- Leetcode 149. Max Points on a Line
- 149. Max Points on a Line
- LeetCode 149. Max Points on a Line
- leetcode.149. Max Points on a Line
- LeetCode-149.Max Points on a Line
- 149. Max Points on a Line
- leetcode 149. Max Points on a Line
- leetCode 149. Max Points on a Line
- 149. Max Points on a Line
- [LeetCode] 149. Max Points on a Line
- 149. Max Points on a Line
- LeetCode 149. Max Points on a Line
- [LeetCode]149. Max Points on a Line
- SQL四种语言:DDL,DML,DCL,TCL
- ZigBee ZStack 协议栈学习-- 一个数据包的艺术之旅
- Gradle常用技巧
- C++静态库与动态库的区别?
- mac地址格式
- 149. Max Points on a Line
- mysql索引失效原因
- 扫描的pdf文件怎么编辑修改
- 38. Count and Say
- oracle squence
- 思岚科技邀您体验智能黑科技 届时将惊现明星大咖!
- Framework Design Guidelines笔记
- python
- Debug 运行正常,Release版本不能正常运行