161. Max Points on a Line

原创 2016年08月29日 16:19:02

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

Subscribe to see which companies asked this question。

分别求每个点与其共线的最多点的个数。 要进行两层循环,最外层固定一个点Point[i];然后计算Point[i]与其他点的直线斜率,统计出斜率相同的点的个数,找出最大值,即为与Point[i]共线最多的点的个数。最后计算所有Point[i]中的最大值即为最后的结果。
 注意的地方:
 1.当内层循环与外层循环是同一个点的时候就忽略内层循环对该点的处理;
 2.内层遇到的点与外层选定的点是同一个时;
 3.内层循环遇到的点与外层选定的点在同一竖直线上时.

最后要计算points[i]在同一直线上最大值时这个地方要注意,Max是要与 entry.getValue()+same-1相比较,例子[[1,1],[1,1],[1,1],[4,5],[4,5]]

  /**
	 * 分别求每个点与其共线的最多点的个数。
	 * 要进行两层循环,最外层固定一个点Point[i];
	 * 然后计算Point[i]与其他点的直线斜率,统计出斜率相同的点的个数,找出最大值,即为与Point[i]共线最多的点的个数。
	 * 最后计算所有Point[i]中的最大值即为最后的结果。
	 * 
	 * 注意的地方:
	 * 1.当内层循环与外层循环是同一个点的时候就忽略内层循环对该点的处理;
	 * 2.内层遇到的点与外层选定的点是同一个时;
	 * 3.内层循环遇到的点与外层选定的点在同一竖直线上时.
	 */
	 public int maxPoints(Point[] points) {
		 
		 int len = points.length;
		 /*如果len小于等于2则返回这个len*/
		 if(len <=2){
			 return len;
		 }
		 /*Max定义好准备返回最后的结果*/
		 int Max = 0;
		 /*与points[i]相同的点的个数*/
		 int same = 1;
		 /*HashMap中存的是每个斜率对应的相同点的个数*/
		 HashMap<Double, Integer> countMap = new HashMap<Double, Integer>();
		 
		 for(int i=0;i<len;i++){
			 /*Step1:选定points[i]之后计算该点与其他点的斜率*/
			 countMap.clear();
			 same = 1;
			 for(int j=0;j<len;j++){
				 /*如果是同一个points[i]则忽略*/
				 if(i==j){
					 continue;
				 }
				 /*如果points[j]与points[i]相同,没有办法计算这两个节点的xiel,则same++*/
				 if(points[i].x == points[j].x && points[i].y == points[j].y){
					 same++;
				 }else{
					 /*计算斜率是要注意斜率不存在的情况*/
					 double slope = points[i].x == points[j].x ? Integer.MAX_VALUE:(points[i].y - points[j].y+0.0)/(points[i].x - points[j].x); 
					 int num = 1;
					 if(countMap.containsKey(slope)){
						 num = countMap.get(slope);
					 }
					 num ++;
					 countMap.put(slope, num);
				 }
			 }
			 /*Step2:计算与points[i]在同一条线上的最多点的点的个数*/
			 Max = Max < same ? same : Max;
			 for(Map.Entry<Double, Integer> entry : countMap.entrySet()){
				 if(Max < entry.getValue()+same-1){//这个地方要注意,Max是要与 entry.getValue()+same-1相比较,例子[[1,1],[1,1],[1,1],[4,5],[4,5]]
					 Max = entry.getValue()+same-1;
				 }
			 }
		 }
		 
		 return Max;
	        
	    }


版权声明:本文为博主原创文章,未经博主允许不得转载。

【LeetCode】Max Points on a Line 解题报告

【题意】 求二维平面上n个点中,最多共线的点数。 【思路】 比较直观的方法是,三层循环,以任意两点划线,判断第三个点是否在这条直线上。 【Java代码】 /** * Definition for a...
  • ljiabin
  • ljiabin
  • 2014年08月28日 22:05
  • 6375

Leetcode: 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....
  • doc_sgl
  • doc_sgl
  • 2013年12月03日 22:57
  • 18483

leetcode 149:Max Points on a Line(java实现)细致分析

Given n points on a 2D plane, find the maximum number of points that lie on the same straight line...
  • tingting256
  • tingting256
  • 2015年11月04日 23:35
  • 669

LeetCode Max Points on a Line 解题报告

Max Points on a Line 解题报告 http://oj.leetcode.com/problems/max-points-on-a-line/ 给你一组点,求共线最多点的个数。 思路,...
  • worldwindjp
  • worldwindjp
  • 2014年01月30日 14:42
  • 7345

Max Points on a Line -- LeetCode

原题链接: http://oj.leetcode.com/problems/max-points-on-a-line/  这道题属于计算几何的题目,要求给定一个点集合,是求出最多点通过一条直线的数量。...
  • linhuanmars
  • linhuanmars
  • 2014年03月14日 00:45
  • 9499

LeetCode(149)Max Points on a Line

题目如下: Given n points on a 2D plane, find the maximum number of points that lie on the same straight ...
  • feliciafay
  • feliciafay
  • 2014年03月07日 13:49
  • 2014

Leetcode 149. Max Points on a Line

149. Max Points on a Line Total Accepted: 56036 Total Submissions: 392865 Difficulty: Hard Gi...
  • fantasiasango
  • fantasiasango
  • 2016年04月29日 10:38
  • 190

LeetCode 149. Max Points on a Line

参考了别人的题解 1. 遍历meige
  • u014674776
  • u014674776
  • 2014年06月01日 02:27
  • 822

【LeetCode with Python】 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.
  • nerv3x3
  • nerv3x3
  • 2014年09月21日 17:41
  • 9742

LeetCode 149 — Max Points on a Line(C++ Java Python)

题目:http://oj.leetcode.com/problems/max-points-on-a-line/ Given n points on a 2D plane, find the maxi...
  • dragon_dream
  • dragon_dream
  • 2014年03月02日 10:50
  • 3776
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:161. Max Points on a Line
举报原因:
原因补充:

(最多只允许输入30个字)