max-points-on -a-line
来源:互联网 发布:温度测试仪软件 编辑:程序博客网 时间:2024/06/05 12:00
问题描述:
Given n points on a 2D plane, find the maximum number of points that lie on the same straight line.
java方案:
需要两重循环,第一重循环遍历起始点a,第二重循环遍历剩余点b。
a和b如果不重合,就可以确定一条直线。
对于每个点a,构建 斜率->点数 的map。
(1)b与a重合,以a起始的所有直线点数+1 (用duplicate统一相加)
(2)b与a不重合,a与b确定的直线点数+1
/** * Definition for a point. * class Point { * int x; * int y; * Point() { x = 0; y = 0; } * Point(int a, int b) { x = a; y = b; } * } */import java.util.*;public class Solution { public int maxPoints(Point[] points) { int result=0; if(points.length==0){ return 0; } if(points.length==1){ return 1; } for(int i=0;i<points.length;i++){ int curmax=1;int duplicate=0; int veticalpoint=0; Map<Double,Integer> mp=new HashMap<Double,Integer>(); Point a=points[i]; for(int j=0;j<points.length;j++){ if(j==i)continue; Point b=points[j]; double x1=b.x-a.x; double y1=b.y-a.y; if(x1==0&&y1==0){//点重合了 duplicate++; }else if(x1==0){//垂直线段上的点,两者顺序不能反,必须先判断重合在判断垂直 if(veticalpoint==0)veticalpoint=2; else veticalpoint++; curmax=max(curmax,veticalpoint); } else { Double k=y1/x1; if(mp.get(k)==null)mp.put(k, 2); else{mp.put(k, mp.get(k)+1);} curmax=max(curmax,mp.get(k)); } } result=max(result,curmax+duplicate); } return result; } public int max(int a,int b){ return a>b?a:b; }}
阅读全文
0 0
- 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
- 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
- 冒泡排序
- codeforces548E Mike and Foam -- 容斥
- SPLAY树
- linux,Ubuntu 16.04 设置MySQL远程访问权限
- 发送自定义事件
- max-points-on -a-line
- HDU3072 Intelligence System【最小树形图】
- 《数据库SQL实战》统计出当前各个title类型对应的员工当前薪水对应的平均工资。
- Java注解(二):注解处理器
- 树状数组求逆序对
- 堆棋子
- Mysql数据表管理
- 模板模式的应用
- RecastNavigation-NavMesh生成原理